<template>
  <div class="page_root" data-page-name="我的绩效-详情" data-page-identification="h_amxwncjfaw">
      <!--                  协作分享-->
      <a-modal
          v-model:visible="shareVisible"
          title="协作分享"
          @ok="handleConfirmShare"
          @cancel="handleCancelShare"
          width="1000px"
      >
          <a-row :gutter="24">
              <a-col :span="5">
                  <a-form-item>
                      <a-select
                          placeholder="请选择项目阶段"
                          v-model:value="shareFilterMilpost"
                          showSearch
                          :options="stateLi.milepostList"
                          :field-names="{ label: 'milepostName', value: 'milepostId' }"
                          @focus="getMilepostList"
                          @change="handleShareSearch"
                          :filter-option="
                                    (input, option) => {
                                        return option.milepostName.toLowerCase().indexOf(input.toLowerCase()) >= 0
                                    }
                                "
                      />
                  </a-form-item>
              </a-col>
              <a-col :span="5">
                  <a-form-item>
                      <a-select
                          placeholder="请选择项目阶段"
                          v-model:value="shareFilterIsShare"
                          :options="[
                                    {
                                        label: '是',
                                        value: '是'
                                    },
                                    {
                                        label: '否',
                                        value: '否'
                                    }
                                ]"
                          @change="handleShareSearch"
                          allow-clear
                      />
                  </a-form-item>
              </a-col>
          </a-row>
          <div class="table-box">
              <a-table :scroll="{  y: '580px' }" bordered :columns="shareColumns" :pagination="false" :data-source="shareData"  row-key="taskId"  :row-selection="{ selectedRowKeys: share.selectedRowKeys, onChange: onShareSelectChange }">
                  <template #bodyCell="{ column, record, text }">
                      <template v-if="column.dataIndex === 'opration'">
                          <a-checkbox >Checkbox</a-checkbox>
                      </template>
                  </template>
              </a-table>
          </div>
      </a-modal>
      <!--                  协作分享-->
      <!--审批详情-->
      <a-modal @cancel="statuState.visible = false" centered :visible="statuState.visible" title="审批详情" :footer="null" :body-style="{maxHeight:'700px',overflowY:'auto'}" width="400px">
          <div class="status-item" v-for="(item, index) in statuState.list">
              <div class="title-new-status">
                  <div class="left-title"
                  >审批类型:<span class="weight-status-new">{{ item.processName }} </span></div
                  >
                  <div class="right-title"
                  >审批提交时间:<span class="weight-status-new">{{ item.createdDate }} </span></div
                  >
              </div>
              <a-steps class="status-step" direction="vertical">
                  <a-step
                      v-for="(inside, index) in item.processTaskList"
                      :title="inside.nodeMessage"
                      :description="inside.taskName + ':' + inside.assignUserName"
                      :status="getIconStatus(inside.nodeStatus)"
                  />
              </a-steps>
          </div>
      </a-modal>

      <!--审批详情-->
      <a-modal :visible="scoreState.visible" title="加减分详情" :footer="null" width="1000px" @cancel="scoreState.visible = false" centered :body-style="{paddingTop:'16px'}">
          <div class="score-title-first">
              <ExclamationCircleOutlined style="color:orange;margin-right:8px" />已结算的任务不支持通过编辑修改是否扣分，请联系相关领导通过员工绩效页面做修正加减分处理
          </div>
          <div class="score-table" v-if="scoreState.type === '项目总监'">
              <div class="score-title"
              >项目总监加减分总和：<span
                  :class="[ calculateTotalTaskPoints(scoreState.scoreData)>=0 ? 'score-num' : 'score-num-red']"
              >{{ calculateTotalTaskPoints(scoreState.scoreData) }}</span
              >
              </div>

              <div v-for="(item,index) in scoreState.scoreData" :key="index" style="margin-bottom:17px">
                  <div class="score-month"
                  >{{item.month}}月绩效结算明细
                      <span class="month-score"
                      >月度加减分总和：<span class="default-score">{{getScore(item.data)}}</span></span
                      >
                  </div>
                  <a-table :scroll="{ x: '700px', y: '200px' }" :columns="actionState.labelCoulmn" :dataSource="item.data" bordered :pagination="false" />
              </div>
          </div>
          <div class="score-table" v-if="scoreState.type === '项目经理'">
              <div class="score-title"
              >项目经理加减分总和：<span
                  :class="[ calculateTotalTaskPoints(scoreState.scoreData)>=0 ? 'score-num' : 'score-num-red']"
              >{{ calculateTotalTaskPoints(scoreState.scoreData) }}</span
              >
              </div>
              <div v-for="(item,index) in scoreState.scoreData" :key="index" style="margin-bottom:17px">
                  <div class="score-month"
                  >{{item.month}}月绩效结算明细
                      <span class="month-score"
                      >月度加减分总和：<span class="default-score">{{getScore(item.data)}}</span></span
                      >
                  </div>
                  <a-table :scroll="{ x: '700px', y: '200px' }" :columns="actionState.labelCoulmn" :dataSource="item.data" bordered :pagination="false" />
              </div>
          </div>
          <div class="score-table" v-if="scoreState.type === '负责人'">
              <div class="score-title"
              >项目负责人和任务执行人加减分总和：<span
                  :class="[ calculateTotalTaskPoints(scoreState.scoreData)>=0 ? 'score-num' : 'score-num-red']"
              >{{ calculateTotalTaskPoints(scoreState.scoreData) }}</span
              >
              </div>
              <div v-for="(item,index) in scoreState.scoreData" :key="index" style="margin-bottom:17px">
                  <div class="score-month"
                  >{{item.month}}月绩效结算明细
                      <span class="month-score"
                      >月度加减分总和：<span class="default-score">{{getScore(item.data)}}</span></span
                      >
                  </div>
                  <a-table :scroll="{ x: '700px', y: '200px' }" :columns="actionState.labelCoulmn" :dataSource="item.data" bordered :pagination="false" />
              </div>
          </div>
      </a-modal>
      <!--          FAQ-->
      <a-modal
          v-model:visible="examsVisible"
          :closable="false"
          :footer="null"
          :width="720"
          :centered="true"
          :destroyOnClose="true"
          :keyboard="false"
          :maskClosable="false"
          :body-style="{ maxHeight: '800px', overflowY: 'auto',overflowX: 'hidden', padding: 0 }"
          wrapClassName="exam-wrapper"
      >
          <div style="margin: 16px 24px; font-weight: bold; font-size: 16px; color: #262626; line-height: 1">{{ taskModalText.modalTitle }}</div>
          <a-divider style="margin: 0px; background: #ebebeb" />
          <al-box :class="['tips', taskState.isExam ? 'exam' : '']" align="center" justify="start">
              <img
                  class="icon"
                  src="data:image/svg+xml;charset=utf-8;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iMTZweCIgaGVpZ2h0PSIxNnB4IiB2aWV3Qm94PSIwIDAgMTYgMTYiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8ZyBpZD0i6aG16Z2iLTEiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPgogICAgICAgIDxnIGlkPSLlvIDlp4vlrabkuaAt5pyA6auY6auY5bqmODAwcHjmoIfms6giIHRyYW5zZm9ybT0idHJhbnNsYXRlKC00MCwgLTgxKSI+CiAgICAgICAgICAgIDxnIGlkPSLlm77moIcv6YCa55So5Zu+5qCHL+ivtOaYjiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNDAsIDgxKSI+CiAgICAgICAgICAgICAgICA8cmVjdCBpZD0i55+p5b2i5aSH5Lu9LTgwIiBmaWxsPSIjRDhEOEQ4IiBvcGFjaXR5PSIwIiB4PSIwIiB5PSIwIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiPjwvcmVjdD4KICAgICAgICAgICAgICAgIDxnIGlkPSLnvJbnu4QtMTkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuNTc2NywgMS40OTUzKSI+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTYuNSwxMyBDMTAuMDg5ODUwOSwxMyAxMywxMC4wODk4NTA5IDEzLDYuNSBDMTMsMi45MTAxNDkxMyAxMC4wODk4NTA5LDAgNi41LDAgQzIuOTEwMTQ5MTMsMCAwLDIuOTEwMTQ5MTMgMCw2LjUgQzAsMTAuMDg5ODUwOSAyLjkxMDE0OTEzLDEzIDYuNSwxMyBaIiBpZD0i5qSt5ZyG5b2i5aSH5Lu9LTQiIHN0cm9rZT0iI0ZBQUQxNCIgc3Ryb2tlLXdpZHRoPSIwLjk5NTMyOCI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgIDxsaW5lIHgxPSI2LjQ2NDM1NTQ3IiB5MT0iMy41OTc2MTE2NCIgeDI9IjYuNDY0MzU1NDciIHkyPSI3LjcxOTU1OTg4IiBpZD0i6Lev5b6ELTciIHN0cm9rZT0iI0ZBQUQxNCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIj48L2xpbmU+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTYuNTIyMzM4ODcsMTAuMDA0NzE2MSBDNi45MzY1NTI0MywxMC4wMDQ3MTYxIDcuMjcyMzM4ODcsOS42Njg5Mjk3IDcuMjcyMzM4ODcsOS4yNTQ3MTYxMyBDNy4yNzIzMzg4Nyw4Ljg0MDUwMjU3IDYuOTM2NTUyNDMsOC41MDQ3MTYxMyA2LjUyMjMzODg3LDguNTA0NzE2MTMgQzYuMTA4MTI1Myw4LjUwNDcxNjEzIDUuNzcyMzM4ODcsOC44NDA1MDI1NyA1Ljc3MjMzODg3LDkuMjU0NzE2MTMgQzUuNzcyMzM4ODcsOS42Njg5Mjk3IDYuMTA4MTI1MywxMC4wMDQ3MTYxIDYuNTIyMzM4ODcsMTAuMDA0NzE2MSBaIiBpZD0i5qSt5ZyG5b2iIiBmaWxsPSIjRkFBRDE0Ij48L3BhdGg+CiAgICAgICAgICAgICAgICA8L2c+CiAgICAgICAgICAgIDwvZz4KICAgICAgICA8L2c+CiAgICA8L2c+Cjwvc3ZnPg=="
              />
              <span>{{ taskModalText.tipText }}</span>
          </al-box>
          <div class="content-wrapper">
              <a-spin :spinning="taskState.loading" tip="准备考题中，请稍后...">
                  <div class="section">
                      <template v-for="(finishQ, finishQindex) in taskState.finishQList" :key="finishQindex">
                          <a-row class="table">
                              <a-col class="title" :span="4">题目来源</a-col>
                              <a-col class="content" :span="20">完成标准</a-col>
                              <a-col class="title" :span="4">题目</a-col>
                              <a-col class="content" :span="20">
                                  <div v-if="!taskState.isExam" v-html="formatText(finishQ.studyQuestion)"></div>
                                  <div v-else v-html="formatText(finishQ.examQuestion)"></div>
                                  <div v-if="taskState.isExam && finishQ.examQuestion">
                                      <a-radio-group
                                          style="width: 100%"
                                          v-model:value="
taskState.questionRef[
`finishQ${
String(finishQ.questionId)
}`
]
"
                                      >
                                          <a-row>
                                              <a-col
                                                  :span="24"
                                                  v-for="(optionItem, optionIndex) in finishQ.examOption.split(/[;,]/).filter(item => item.trim() !== '')
"
                                                  :key="optionIndex"
                                              >
                                                  <a-radio :style="taskState.radioStyle" :value="optionItem.charAt(0)">
                                                      {{ optionItem }}
                                                  </a-radio>
                                              </a-col>
                                          </a-row>
                                      </a-radio-group>
                                  </div>
                              </a-col>
                          </a-row>
                      </template>
                      <template v-for="(sopQ, sopQindex) in taskState.sopQList" :key="sopQindex">
                          <a-row class="table">
                              <a-col class="title" :span="4">题目来源</a-col>
                              <a-col class="content" :span="20">SOP</a-col>
                              <a-col class="title" :span="4">题目</a-col>
                              <a-col class="content" :span="20">
                                  <div v-if="!taskState.isExam" v-html="formatText(sopQ.studyQuestion)"></div>
                                  <div v-else v-html="formatText(sopQ.examQuestion)"></div>
                                  <div v-if="taskState.isExam &&sopQ.examQuestion">
                                      <a-radio-group
                                          style="width: 100%"
                                          v-model:value="
              taskState.questionRef[
                  `sopQ${
                      String(sopQ.questionId)
                  }`
              ]
          "
                                      >
                                          <a-row>
                                              <a-col :span="24" v-for="(optionItem, optionIndex) in sopQ.examOption.split(/[;,]/).filter(item => item.trim() !== '')" :key="optionIndex">
                                                  <a-radio :style="taskState.radioStyle" :value="optionItem.charAt(0)">
                                                      {{ optionItem }}
                                                  </a-radio>
                                              </a-col>
                                          </a-row>
                                      </a-radio-group>
                                  </div>
                              </a-col>
                          </a-row>
                      </template>
                  </div>
              </a-spin>
          </div>
          <a-divider style="margin: 0px; background: #ebebeb" />
          <div class="footer">
              <div class="failed-text">
                  该任务考试已失败次数：<span class="count" style="font-size: 16px; color: #ff0000">{{
                      taskState.examFailNumber
                  }}</span>
              </div>
              <a-button type="primary" @click="handleExam">{{ taskModalText.buttonText }}</a-button>
          </div>
      </a-modal>
      <!--          FAQ-->
      <!--                  查看FAQ-->
      <a-modal
          v-model:visible="showFAQ.examsVisible"
          :footer="null"
          :width="720"
          :centered="true"
          :destroyOnClose="true"
          :keyboard="false"
          :maskClosable="false"
          :body-style="{ height: '820px', overflow: 'auto',overflowX: 'hidden', padding: 0 }"
          wrapClassName="exam-wrapper"
      >
          <div style="margin: 16px 24px;font-weight: bold;font-size: 16px;color: #262626;line-height: 1;">查看FAQ</div>
          <a-divider style="margin: 0px;background: #EBEBEB;" />
          <al-box :class="['tips', showFAQ.isExam ? 'exam' : '']" align="center" justify="start">
              <img
                  class="icon"
                  src="data:image/svg+xml;charset=utf-8;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iMTZweCIgaGVpZ2h0PSIxNnB4IiB2aWV3Qm94PSIwIDAgMTYgMTYiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8ZyBpZD0i6aG16Z2iLTEiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPgogICAgICAgIDxnIGlkPSLlvIDlp4vlrabkuaAt5pyA6auY6auY5bqmODAwcHjmoIfms6giIHRyYW5zZm9ybT0idHJhbnNsYXRlKC00MCwgLTgxKSI+CiAgICAgICAgICAgIDxnIGlkPSLlm77moIcv6YCa55So5Zu+5qCHL+ivtOaYjiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNDAsIDgxKSI+CiAgICAgICAgICAgICAgICA8cmVjdCBpZD0i55+p5b2i5aSH5Lu9LTgwIiBmaWxsPSIjRDhEOEQ4IiBvcGFjaXR5PSIwIiB4PSIwIiB5PSIwIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiPjwvcmVjdD4KICAgICAgICAgICAgICAgIDxnIGlkPSLnvJbnu4QtMTkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuNTc2NywgMS40OTUzKSI+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTYuNSwxMyBDMTAuMDg5ODUwOSwxMyAxMywxMC4wODk4NTA5IDEzLDYuNSBDMTMsMi45MTAxNDkxMyAxMC4wODk4NTA5LDAgNi41LDAgQzIuOTEwMTQ5MTMsMCAwLDIuOTEwMTQ5MTMgMCw2LjUgQzAsMTAuMDg5ODUwOSAyLjkxMDE0OTEzLDEzIDYuNSwxMyBaIiBpZD0i5qSt5ZyG5b2i5aSH5Lu9LTQiIHN0cm9rZT0iI0ZBQUQxNCIgc3Ryb2tlLXdpZHRoPSIwLjk5NTMyOCI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgIDxsaW5lIHgxPSI2LjQ2NDM1NTQ3IiB5MT0iMy41OTc2MTE2NCIgeDI9IjYuNDY0MzU1NDciIHkyPSI3LjcxOTU1OTg4IiBpZD0i6Lev5b6ELTciIHN0cm9rZT0iI0ZBQUQxNCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIj48L2xpbmU+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTYuNTIyMzM4ODcsMTAuMDA0NzE2MSBDNi45MzY1NTI0MywxMC4wMDQ3MTYxIDcuMjcyMzM4ODcsOS42Njg5Mjk3IDcuMjcyMzM4ODcsOS4yNTQ3MTYxMyBDNy4yNzIzMzg4Nyw4Ljg0MDUwMjU3IDYuOTM2NTUyNDMsOC41MDQ3MTYxMyA2LjUyMjMzODg3LDguNTA0NzE2MTMgQzYuMTA4MTI1Myw4LjUwNDcxNjEzIDUuNzcyMzM4ODcsOC44NDA1MDI1NyA1Ljc3MjMzODg3LDkuMjU0NzE2MTMgQzUuNzcyMzM4ODcsOS42Njg5Mjk3IDYuMTA4MTI1MywxMC4wMDQ3MTYxIDYuNTIyMzM4ODcsMTAuMDA0NzE2MSBaIiBpZD0i5qSt5ZyG5b2iIiBmaWxsPSIjRkFBRDE0Ij48L3BhdGg+CiAgICAgICAgICAgICAgICA8L2c+CiAgICAgICAgICAgIDwvZz4KICAgICAgICA8L2c+CiAgICA8L2c+Cjwvc3ZnPg=="
              />
              <span>{{ taskModalText.tipText }}</span>
          </al-box>
          <div class="content-wrapper">
              <a-spin :spinning="showFAQ.loading" tip="准备考题中，请稍后...">
                  <div class="section" v-for="(item, index) in showFAQ.questionList" :key="index">
                      <al-box class="h1-title" align="center">
                          <img
                              style="margin-right: 5px"
                              src="data:image/svg+xml;charset=utf-8;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iMTZweCIgaGVpZ2h0PSIxNnB4IiB2aWV3Qm94PSIwIDAgMTYgMTYiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8ZyBpZD0i6aG16Z2iLTEiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPgogICAgICAgIDxnIGlkPSLlvIDlp4vlrabkuaAt5pyA6auY6auY5bqmODAwcHjmoIfms6giIHRyYW5zZm9ybT0idHJhbnNsYXRlKC00MCwgLTE0MikiIGZpbGw9IiNGNTIyMkQiIGZpbGwtcnVsZT0ibm9uemVybyI+CiAgICAgICAgICAgIDxnIGlkPSLpl67popjnjrDosaHlpIfku70tMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNDAsIDE0MikiPgogICAgICAgICAgICAgICAgPHBhdGggZD0iTTgsMTYgQzkuNTE2OTA4MjEsMTYgMTAuOTM1MjY1NywxNS41NzY4MTE2IDEyLjE0Mjk5NTIsMTQuODQ0NDQ0NCBMMTYsMTYgTDE0LjQxNTQ1ODksMTIuNzgwNjc2MyBDMTUuNDEwNjI4LDExLjQ0NzM0MyAxNiw5Ljc5MTMwNDM1IDE2LDggQzE2LDMuNTgyNjA4NyAxMi40MTczOTEzLDAgOCwwIEMzLjU4MjYwODcsMCAwLDMuNTgyNjA4NyAwLDggQzAsMTIuNDE3MzkxMyAzLjU4MjYwODcsMTYgOCwxNiBaIE01LjA1ODkzNzIsNi4zMDE0NDkyOCBDNS4wNzYzMjg1LDUuNjU0MTA2MjggNS4xNTM2MjMxOSw1LjE2MTM1MjY2IDUuMjg4ODg4ODksNC44MjMxODg0MSBDNS40MjQxNTQ1OSw0LjQ4NTAyNDE1IDUuNjQwNTc5NzEsNC4xODM1NzQ4OCA1LjkzNjIzMTg4LDMuOTE4ODQwNTggQzYuMjMzODE2NDMsMy42NTQxMDYyOCA2LjU2NDI1MTIxLDMuNDU3MDA0ODMgNi45Mjc1MzYyMywzLjMzMTQwMDk3IEM3LjI5MDgyMTI2LDMuMjA1Nzk3MSA3LjY3NzI5NDY5LDMuMTQyMDI4OTkgOC4wODExNTk0MiwzLjE0MjAyODk5IEM4LjkwMDQ4MzA5LDMuMTQyMDI4OTkgOS41ODA2NzYzMywzLjM4MzU3NDg4IDEwLjEyNTYwMzksMy44NjQ3MzQzIEMxMC42NzA1MzE0LDQuMzQ1ODkzNzIgMTAuOTQyOTk1Miw0Ljk4NzQzOTYxIDEwLjk0Mjk5NTIsNS43ODc0Mzk2MSBDMTAuOTQyOTk1Miw2LjE0Njg1OTkgMTAuODczNDMsNi40NzM0Mjk5NSAxMC43MzQyOTk1LDYuNzY1MjE3MzkgQzEwLjU5NTE2OTEsNy4wNTcwMDQ4MyAxMC4yOTc1ODQ1LDcuNDIyMjIyMjIgOS44NDM0NzgyNiw3Ljg1ODkzNzIgQzkuMzg5MzcxOTgsOC4yOTU2NTIxNyA5LjA4NzkyMjcxLDguNjA0ODMwOTIgOC45MzkxMzA0Myw4Ljc5MDMzODE2IEM4Ljc5MDMzODE2LDguOTczOTEzMDQgOC42NzgyNjA4Nyw5LjE5NDIwMjkgOC42MDA5NjYxOCw5LjQ1MTIwNzczIEM4LjUyMzY3MTUsOS43MDgyMTI1NiA4LjQ5MDgyMTI2LDEwLjA1MjE3MzkgOC41MDA0ODMwOSwxMC40ODMwOTE4IEw3LjMxMjA3NzI5LDEwLjQ4MzA5MTggQzcuMzEyMDc3MjksOS45Nzg3NDM5NiA3LjM1MjY1Nyw5LjU3NjgxMTU5IDcuNDMzODE2NDMsOS4yNzUzNjIzMiBDNy41MTQ5NzU4NSw4Ljk3MzkxMzA0IDcuNjM2NzE0OTgsOC43MTExMTExMSA3Ljc5OTAzMzgyLDguNDg1MDI0MTUgQzcuOTYxMzUyNjYsOC4yNjA4Njk1NyA4LjI1MzE0MDEsNy45Mjg1MDI0MiA4LjY3NjMyODUsNy40OTM3MTk4MSBDOS4wOTk1MTY5MSw3LjA1NzAwNDgzIDkuMzcxOTgwNjgsNi43NDAwOTY2MiA5LjQ5MzcxOTgxLDYuNTQyOTk1MTcgQzkuNjE1NDU4OTQsNi4zNDU4OTM3MiA5LjY3NTM2MjMyLDYuMDUwMjQxNTUgOS42NzUzNjIzMiw1LjY1OTkwMzM4IEM5LjY3NTM2MjMyLDUuMjY3NjMyODUgOS41MzYyMzE4OCw0LjkyMTczOTEzIDkuMjU3OTcxMDEsNC42MjAyODk4NiBDOC45Nzk3MTAxNCw0LjMxODg0MDU4IDguNTczOTEzMDQsNC4xNjgxMTU5NCA4LjA0MjUxMjA4LDQuMTY4MTE1OTQgQzYuODQ2Mzc2ODEsNC4xNjgxMTU5NCA2LjI0NzM0Myw0Ljg3OTIyNzA1IDYuMjQ3MzQzLDYuMjk5NTE2OTEgTDUuMDU4OTM3Miw2LjI5OTUxNjkxIEw1LjA1ODkzNzIsNi4zMDE0NDkyOCBMNS4wNTg5MzcyLDYuMzAxNDQ5MjggWiBNOC41OTMyMzY3MSwxMi45NTQ1ODk0IEw3LjI4NTAyNDE1LDEyLjk1NDU4OTQgTDcuMjg1MDI0MTUsMTEuNTc4NzQ0IEw4LjU5MzIzNjcxLDExLjU3ODc0NCBMOC41OTMyMzY3MSwxMi45NTQ1ODk0IFoiIGlkPSLlvaLnirYiPjwvcGF0aD4KICAgICAgICAgICAgPC9nPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+"
                              alt=""
                          />
                          问题现象{{index+1}}</al-box
                      >
                      <al-box class="h2-title"  style="margin-left: 0"
                      ><b style="width: 100px; display:block ;text-align: left">问题反馈时间：</b><span>{{ item.feedBackTime }}</span></al-box
                      >
                      <al-box class="h2-title"  style="margin-left: 0"
                      ><b style="width: 100px; display:block ;text-align: left">步骤：</b><span>{{ item.step }}</span></al-box
                      >
                      <al-box class="h2-title"  style="margin-left: 0"
                      ><b style="width: 100px; display:block ;text-align: left">阶段：</b><span>{{ item.stage }}</span></al-box
                      >
                      <al-box class="h2-title"  style="margin-left: 0"
                      ><b style="width: 100px; display:block ;text-align: left">关键字：</b><span>{{ item.keyWords }}</span></al-box
                      >
                      <al-box class="h2-title"  style="margin-left: 0"
                      ><b style="width: 100px; display:block ;text-align: left">问题类型：</b><span>{{ item.problemType }}</span></al-box
                      >

                      <a-row class="table">
                          <a-col class="sub-title" :span="24">问题现象</a-col>
                          <a-col class="title" :span="4">现象发现方</a-col>
                          <a-col class="content" :span="20">
                              <div v-html="formatText(item.discoveredBy)" />
                          </a-col>
                          <a-col class="title" :span="4">具体现象</a-col>
                          <a-col class="content" :span="20">
                              <div v-html="formatText(item.phenomenon)" />
                          </a-col>
                          <a-col class="title" :span="4">导致结果</a-col>
                          <a-col class="content" :span="20">
                              <div v-html="formatText(item.result)" />
                          </a-col>
                          <a-col class="sub-title" :span="24">可能原因</a-col>
                          <a-col class="title" :span="4">原因产生方</a-col>
                          <a-col class="content" :span="20">
                              <div v-html="formatText(item.phenomenonReason)" />
                          </a-col>
                          <a-col class="title" :span="4">可能原因</a-col>
                          <a-col class="content" :span="20">
                              <div v-html="formatText(item.possibleReason)" />
                          </a-col>
                          <a-col class="title" :span="4">原因特征</a-col>
                          <a-col class="content" :span="20">
                              <div v-html="formatText(item.reasonFeature)" />
                          </a-col>
                          <a-col class="sub-title" :span="24">解决SOP和标准动作</a-col>
                          <a-col class="title" :span="4">执行目标</a-col>
                          <a-col class="content" :span="20">
                              <div v-html="formatText(item.executionTarget)" />
                          </a-col>
                          <a-col class="title" :span="4">执行方案</a-col>
                          <a-col class="content" :span="20">
                              <div v-html="formatText(item.plan)" />
                          </a-col>
                          <a-col class="title no-border" :span="4">达成标准</a-col>
                          <a-col class="content no-border" :span="20">
                              <div v-html="formatText(item.reachStandard)" />
                          </a-col>
                      </a-row>
                  </div>
              </a-spin>
          </div>
      </a-modal>
      <!--                  查看FAQ-->
      <a-spin :spinning="stateLi.spinning">
          <div class="my-page">
              <div class="content-box">
                  <div class="right-table">
                      <div class="search">
                          <a-form>
                              <a-row style="height:40px;position: relative">
                                  <a-col :span="5">
                                      <a-form-item label="计划结束时间" :label-col="{span: 9}">
                                          <a-date-picker v-model:value="stateLi.filterLi.endTime" valueFormat="YYYY-MM-DD" />
                                      </a-form-item>
                                  </a-col>
                                  <a-col :span="5">
                                      <a-form-item label="任务负责人" :label-col="{span: 9}">
                                          <a-select
                                              v-model:value="stateLi.filterLi.taskOwner"
                                              allowClear
                                              showSearch
                                              :options="peopleList"
                                              :field-names="{ label: 'label', value: 'value' }"
                                              :filter-option="(input, option) => {
return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0
}
"
                                          />
                                      </a-form-item>
                                  </a-col>
                                  <a-col :span="5" v-if="!isTemplate">
                                      <a-form-item label="任务上下线" :label-col="{span: 9}">
                                          <a-select
                                              v-model:value="stateLi.filterLi.taskStatusOnOrOff"
                                              allowClear
                                              showSearch
                                              :options="[
{ label: '全部', value: '全部' },
{ label: '上线', value: 'true' },
{ label: '下线', value: 'false' }
]"
                                          />
                                      </a-form-item>
                                  </a-col>

                                  <a-col :span="5">
                                      <a-form-item label="任务状态" :label-col="{span: 8}">
                                          <a-select
                                              v-model:value="stateLi.filterLi.taskStatusList"
                                              mode="multiple"
                                              :maxTagCount="1"
                                              showArrow="true"
                                              allowClear
                                              showSearch
                                              :options="[
{ label: '未启动', value: '未启动' },
{ label: '进行中', value: '进行中' },
{ label: '完成', value: '完成' },
{ label: '延期', value: '延期' },
{ label: '延期完成', value: '延期完成' },
{ label: '审批中', value: '审批中' },
{ label: '隐藏', value: '隐藏' },
]"
                                          />
                                      </a-form-item>
                                  </a-col>

                                  <a-col :span="4" style="position: relative">
                                      <a-form-item>
                                          <a-button type="primary" class="mr16 ml10 task-fill-btn" @click="getTableData"> 查询 </a-button>

                                          <!-- <a-button class="mr16" @click="resetSearch">重置</a-button> -->
                                          <a-button v-if="!isTemplate" class="task-no-btn" style="margin-right:20px;" type="primary" ghost :disabled="!projectId || !isTask" @click="handlerAdd">
                                              新建
                                          </a-button>

                                          <a-upload v-if="!isTemplate" :before-upload="handlerTaskImport" :file-list="[]" accept=".xlsx, image/*, .docx, .rp, .xls">
                                              <a-tooltip>
                                                  <template #title>导入</template>
                                                  <div class="export-btn">
                                                      <div class="btn-img"></div>
                                                  </div>
                                              </a-tooltip>
                                          </a-upload>
                                      </a-form-item>
                                  </a-col>
                                  <a-button v-if="isTemplate" style="position: absolute;right: 150px"  type="primary" @click="handleShareTask">

                                      <a-button v-if="isTemplate" style="position: absolute;right: 0" class="mr16 ml10 task-fill-btn" :loading="downLoading" type="primary" @click="downAllFile">
                                          下载全部附件
                                      </a-button>
                              </a-row>
                          </a-form>
                      </div>
                      <!--                          重点关注任务开始-->
                      <a-row v-if="stateLi.keysTaskDataList.length>0">
                          <a-col :span="8" style="padding-left:10px">
                              <span class="task-important"> 重点关注任务 </span>
                          </a-col>
                      </a-row>

                      <div class="table-box" v-if="stateLi.keysTaskDataList.length>0">
                          <!--                            <div>重点关注任务</div>-->

                          <a-table
                              bordered
                              rowKey="taskId"
                              :loading="stateLi.tableLoading"
                              :customRow="customRow"
                              :columns="stateLi.columns"
                              :data-source="stateLi.keysTaskDataList"
                              :pagination="false"
                              :row-class-name="(_record, index) => (index % 2 === 1 ? 'table-striped' : null)"
                              :scroll="{ x: scrollX, y: '150px' }"
                              @resizeColumn="handleTaskResizeColumn"
                          >
                              <template #bodyCell="{ column, record, text }">
                                  <template v-if="column.dataIndex === 'taskStatusOnOrOff'">
                                      <a-switch :checked="record['taskStatusOnOrOff']" :disabled="record.nodeType === 'MENU' || !stateLi.projectManager" @click="changeTaskStatusOnOrOff(record)" />
                                  </template>
                                  <!--                                新-任务进度-->
                                  <template v-if="column.dataIndex === 'taskSchedule'">
                                      <a-progress :percent="record.taskSchedule" status="active" @click="changeTaskSchedule(record.finishPermission,record.taskSchedule,record.taskId,record.taskStatus)" />
                                  </template>
                                  <!--                                end新-任务进度-->
                                  <!-- 新-审核标准字段 -->
                                  <template v-if="column.dataIndex === 'assessorStandard'">
                                      <a-tooltip @mouseenter="handlerGetStandard(record)" placement="top" :overlayStyle="standardStyle" color="#fff">
                                          <template #title>
                                              <p style="color:#262626;margin:0" v-for="(item,index) in stateLi.standardList" :key="index">{{item}}</p>
                                          </template>
                                          <div style="min-width:70px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;">{{text}}</div>
                                      </a-tooltip>
                                  </template>
                                  <!-- 审核标准 -->
                                  <template v-if="column.dataIndex === 'unclosedRiskNumber' || column.dataIndex === 'riskNumber'">
                                      <a @click="handlerShowRisks(record, column.dataIndex === 'unclosedRiskNumber' ? '未关闭' : '全部')">
                                          {{ text }}
                                      </a>
                                  </template>
                                  <template v-if="column.dataIndex ==='actionTaskCount'">
                                      <a @click="handlerShowAction(record)">
                                          {{ text }}
                                      </a>
                                  </template>
                                  <template v-if="column.dataIndex === 'attachmentTemplate'">
                                      <!--                                  预览/下载-->
                                      <div v-for="(item, index) in record.attachmentTemplateList" :key="index">
                                          <a-dropdown>
                    <span style="overflow: hidden; white-space: nowrap; text-overflow: ellipsis; display: block " :title="item.name">
                      {{ item.name }}
                    </span>
                                              <template #overlay>
                                                  <a-menu>
                                                      <a-menu-item>
                                                          <a-button style="width:100%" type="link" size="small" :disabled="!item.type.startsWith('image')" @click="previewAttachment(item)">预览</a-button>
                                                      </a-menu-item>
                                                      <a-menu-item>
                                                          <a-button style="width:100%" type="link" size="small" @click="attachmentTemplateDownLoad(item)">下载</a-button>
                                                      </a-menu-item>
                                                  </a-menu>
                                              </template>
                                          </a-dropdown>
                                      </div>
                                      <!--                                  预览/下载-->
                                  </template>
                                  <template v-if="column.dataIndex === 'milepostName'">
                                      {{text}}
                                  </template>

                                  <template v-if="column.dataIndex === 'dependencyTaskName'"> {{record.dependencyTaskIndex}} {{text}} </template>
                                  <!--                                SOP-->
                                  <template v-if="column.dataIndex === 'taskDependency'">
                                      <a-tooltip placement="top" :overlayStyle="standardStyle" color="#fff">
                                          <template #title>
                                              <p v-for="(item,index) in handlerGetSpace(record.taskDependency)" :key="index" style="color:#262626;margin:0">{{item}}</p>
                                          </template>
                                          <div class="finish-standard">{{ text }}</div>
                                      </a-tooltip>
                                  </template>
                                  <!--                                SOP-->
                                  <!-- 完成标准 -->
                                  <template v-if="column.dataIndex === 'finishStandard'">
                                      <a-tooltip placement="top" :overlayStyle="standardStyle" color="#fff">
                                          <template #title>
                                              <p v-for="(item,index) in handlerGetSpace(record.finishStandard)" :key="index" style="color:#262626;margin:0">{{item}}</p>
                                          </template>
                                          <div class="finish-standard">{{ text }}</div>
                                      </a-tooltip>
                                  </template>
                                  <template v-if="column.dataIndex === 'taskRemarks'">
                                      <a-tooltip placement="top" :overlayStyle="standardStyle" color="#fff">
                                          <template #title>
                                              <p v-for="(item,index) in handlerGetSpace(record.taskRemarks)" :key="index" style="color:#262626;margin:0">{{item}}</p>
                                          </template>
                                          <div class="finish-standard">{{ text }}</div>
                                      </a-tooltip>
                                  </template>
                                  <template v-if="column.dataIndex === 'description'">
                                      <a-tooltip placement="top" :overlayStyle="standardStyle" color="#fff">
                                          <template #title>
                                              <p v-for="(item,index) in handlerGetSpace(record.description)" :key="index" style="color:#262626;margin:0">{{item}}</p>
                                          </template>
                                          <div class="finish-standard">{{ text }}</div>
                                      </a-tooltip>
                                  </template>
                                  <template v-if="column.dataIndex === 'taskName'">
                                      <div v-if="record.collaborate==='协作任务'">
                                          <div class="task-collaborate">协作任务</div>

                                          <a-tooltip placement="top" :overlayStyle="standardStyle" color="#fff">
                                              <template #title>
                                                  <p style="color:#262626;margin:0">{{text}}</p>
                                              </template>
                                              <div :class="['task-name-title', {'task-name-title-right': record.collaborate==='协作任务'}]">
                                                  {{ text }}

                                              </div>
                                          </a-tooltip>
                                      </div>
                                      <div v-else>
                                          <div class="task-name" v-if="isTemplate">
                                              <div v-if='record.mark==="里程碑"' :class="{'task-milestone':record.mark === '里程碑','task-milestone-right':record.mark === '里程碑'&&record.critialPath}"
                                              >里程碑</div
                                              >
                                              <div v-else-if='record.mark==="初验"' :class="{'task-first':record.mark === '初验','task-first-right':record.mark === '初验'&&record.critialPath}"></div>
                                              <div
                                                  v-else-if='record.mark==="终验"'
                                                  class="task-over"
                                                  :class="{'task-over':record.mark === '终验','task-over-right':record.mark === '终验'&&record.critialPath}"
                                              ></div>
                                              <div v-if="record.critialPath" class="critical-path">关键路径</div>
                                              <div
                                                  :class="{ 'is-first-no': record.mark === null&&!record.critialPath, 'is-first': record.mark !== null,'is-first-path': record.mark !== null&&record.critialPath ,'is-first-path-no-mark': record.mark === null&&record.critialPath}"
                                              >
                                                  <a-tooltip placement="top" :overlayStyle="standardStyle" color="#fff">
                                                      <template #title>
                                                          <p style="color:#262626;margin:0">{{record.taskIndex }} {{text}}</p>
                                                      </template>
                                                      <span class="task-name-title">{{record.taskIndex }} {{text}}</span>
                                                  </a-tooltip>
                                              </div>
                                          </div>
                                      </div>
                                  </template>

                                  <!-- 倒计时 -->
                                  <template v-if="column.dataIndex === 'countDown'">
                                      <div class="count-down-content">
                                          <a-tooltip placement="top" :overlayStyle="standardStyle" color="#fff" v-if="shouldDisplayCountDownWithTooltip(record.labelList, '倒计时')[0]">
                                              <template #title>
                                                  <div class="count-down-hover">
                                                      <p v-for="(item, index) in record.hoverLabelList" :key="index">{{
                                                              item
                                                          }}</p>
                                                  </div>
                                              </template>
                                              <div class="count-down"
                                              >{{
                                                      splitStringByColon(
                                                          shouldDisplayCountDownWithTooltip(record.labelList, '倒计时')[1]
                                                      )[0]








                                                  }}:<span class="weight-num">{{
                                                          splitStringByColon(
                                                              shouldDisplayCountDownWithTooltip(record.labelList, '倒计时')[1]
                                                          )[1]
                                                      }}</span></div
                                              >
                                          </a-tooltip>
                                          <div v-if="shouldDisplayCountDownWithTooltip(record.labelList, '延期')[0]" class="extension-color">
                                              {{
                                                  splitStringByColon(
                                                      shouldDisplayCountDownWithTooltip(record.labelList, '延期')[1]
                                                  )[0]








                                              }}:<span class="weight-num">{{
                                                  splitStringByColon(
                                                      shouldDisplayCountDownWithTooltip(record.labelList, '延期')[1]
                                                  )[1]
                                              }}</span>
                                          </div>

                                          <div
                                              v-if="shouldDisplayCountDownWithTooltip(record.labelList, '项目总监')[0]"
                                              :class="{
                              'all-group-no': hasHyphen(
                                  shouldDisplayCountDownWithTooltip(record.labelList, '项目总监')[1]
                              ),
                              'all-group-yes': hasPlus(
                                  shouldDisplayCountDownWithTooltip(record.labelList, '项目总监')[1]
                              )
                          }"
                                              @click="showScore(record.projectDirectorLabelList,'项目总监')"
                                          >{{
                                                  splitStringByColon(
                                                      shouldDisplayCountDownWithTooltip(record.labelList, '项目总监')[1]
                                                  )[0]








                                              }}:<span class="weight-num">{{
                                                      splitStringByColon(
                                                          shouldDisplayCountDownWithTooltip(record.labelList, '项目总监')[1]
                                                      )[1]
                                                  }}</span></div
                                          >

                                          <div
                                              v-if="shouldDisplayCountDownWithTooltip(record.labelList, '项目经理')[0]"
                                              :class="{
                              'pm-score-no': hasHyphen(
                                  shouldDisplayCountDownWithTooltip(record.labelList, '项目经理')[1]
                              ),
                              'pm-score-yes': hasPlus(
                                  shouldDisplayCountDownWithTooltip(record.labelList, '项目经理')[1]
                              )
                          }"
                                              @click="showScore(record.pmLabelList,'项目经理')"
                                          >{{
                                                  splitStringByColon(
                                                      shouldDisplayCountDownWithTooltip(record.labelList, '项目经理')[1]
                                                  )[0]








                                              }}:<span class="weight-num">{{
                                                      splitStringByColon(
                                                          shouldDisplayCountDownWithTooltip(record.labelList, '项目经理')[1]
                                                      )[1]
                                                  }}</span></div
                                          >

                                          <div
                                              v-if="shouldDisplayCountDownWithTooltip(record.labelList, '任务执行人')[0]"
                                              :class="{
                              'ower-score-no': hasHyphen(
                                  shouldDisplayCountDownWithTooltip(record.labelList, '任务执行人')[1]
                              ),
                              'ower-score-yes': hasPlus(
                                  shouldDisplayCountDownWithTooltip(record.labelList, '任务执行人')[1]
                              )
                          }"
                                              @click="showScore(record.taskOwnerLabelList,'负责人')"
                                          >{{
                                                  splitStringByColon(
                                                      shouldDisplayCountDownWithTooltip(record.labelList, '任务执行人')[1]
                                                  )[0]








                                              }}:<span class="weight-num">{{
                                                      splitStringByColon(
                                                          shouldDisplayCountDownWithTooltip(record.labelList, '任务执行人')[1]
                                                      )[1]
                                                  }}</span></div
                                          >
                                      </div>
                                  </template>
                                  <!-- 倒计时 -->
                                  <template v-if="column.dataIndex === 'taskStatus'">
                                      <div class="task-status-new" @click="getTaskStatus(record.taskId,0)">
                                          <div class="wqd-btn" v-if="text==='未启动'">未启动</div>
                                          <div class="jxz-btn" v-else-if="text==='进行中'">进行中</div>
                                          <div class="wc-btn" v-else-if="text==='完成'">完成</div>
                                          <div class="yq-btn" v-else-if="text==='延期'">延期</div>
                                          <div class="yqwc-btn" v-else-if="text==='延期完成'">延期完成</div>
                                          <div class="spz-btn" v-else-if="text==='审批中'">审批中</div>
                                          <div class="wqd-btn" v-else-if="text==='下线'">下线</div>
                                          <div v-else>{{text}}</div>
                                      </div>
                                  </template>
                                  <template v-if="column.dataIndex === 'attachment'">
                                      <!--                                  预览/下载-->
                                      <div v-for="(item, index) in record.ppmEnclosureInfoList" :key="index">
                                          <a-dropdown>
                    <span style="overflow: hidden; white-space: nowrap; text-overflow: ellipsis; display: block " :title="item.name">
                      {{ item.name }}
                    </span>
                                              <template #overlay>
                                                  <a-menu>
                                                      <a-menu-item>
                                                          <a-button style="width:100%" type="link" size="small" :disabled="!item.type.startsWith('image')" @click="previewAttachment(item)">预览</a-button>
                                                      </a-menu-item>
                                                      <a-menu-item>
                                                          <a-button style="width:100%" type="link" size="small" @click="handlerDownload(item)">下载</a-button>
                                                      </a-menu-item>
                                                  </a-menu>
                                              </template>
                                          </a-dropdown>
                                      </div>
                                      <!--                                  预览/下载-->
                                  </template>
                                  <template v-if="column.dataIndex === 'operation'">
                                      <div v-if="record.collaborate!=='协作任务'">
                                          <a-space v-if="record.nodeType === 'MENU'">
                                              <a-button size="small" type="link" :disabled="record.disabledMenuEditBtn" @click="handlerEdit(record)"> 编辑 </a-button>
                                              <a-popconfirm title="确定要删除吗？" :disabled="record.disabledMenuDelBtn" @confirm="handlerDelete(record)">
                                                  <a-button :disabled="record.disabledMenuDelBtn" type="link">删除</a-button>
                                              </a-popconfirm>
                                          </a-space>
                                          <a-space v-else>
                                              <a-button
                                                  size="small"
                                                  v-if="(record.taskStatus === '完成' || record.taskStatus === '延期完成') && !record.instanceId"
                                                  type="link"
                                                  @click="handlerEdit(record, true)"
                                              >
                                                  恢复
                                              </a-button>
                                              <template v-else>
                                                  <a-button size="small" v-if="(!record.taskExamStatus || record.taskExamStatus === '未通过') && isTemplate" type="link" @click="handleStart(record)">
                                                      开始
                                                  </a-button>
                                                  <a-button size="small" v-else type="link" @click="beforeOk(record)"> 完成 </a-button>
                                              </template>
                                              <a-divider style="margin:0;border-color: #3875FF" type="vertical" />
                                              <a-button size="small" type="link" :disabled="record.disabledEditBtn" @click="handlerEdit(record)"> 编辑 </a-button>
                                              <a-divider style="margin:0;border-color: #3875FF" type="vertical" />
                                              <a-dropdown>
                                                  <template #overlay>
                                                      <a-menu @click="handleMenuClick">
                                                          <a-menu-item key="1" v-if="!isTemplate">
                                                              <a-popconfirm title="确定要删除吗？" :disabled="record.disabledDelBtn" @confirm="handlerDelete(record)">
                                                                  <a-button size="small" :disabled="record.disabledDelBtn" type="link">删除</a-button>
                                                              </a-popconfirm>
                                                          </a-menu-item>
                                                          <a-menu-item key="2">
                                                              <a-button size="small" type="link" @click="handlerWarning(record)"> 预警 </a-button>
                                                          </a-menu-item>

                                                          <a-menu-item key="3">
                                                              <a-button size="small" type="link" :disabled="record.disabledNoteBtn" @click="handlerShowNotes(record)"> 历史备注 </a-button>
                                                          </a-menu-item>
                                                          <a-menu-item key="4">
                                                              <a-button
                                                                  size="small"
                                                                  type="link"
                                                                  v-if="(record.taskStatus === '完成' || record.taskStatus === '延期完成') && !record.instanceId"
                                                                  @click="handleSup(record)"
                                                              >
                                                                  补传附件
                                                              </a-button>
                                                          </a-menu-item>
                                                          <a-menu-item key="4">
                                                              <a-button size="small" type="link" @click="handleShowFaq(record)"> 查看FAQ </a-button>
                                                          </a-menu-item>
                                                          <a-menu-item key="5" v-if="record.hidden==='false' && isTemplate">
                                                              <a-button size="small" type="link" @click="handleHiddenTask(record)"> 任务隐藏 </a-button>
                                                          </a-menu-item>
                                                          <a-menu-item key="6" v-if="record.hidden==='true'&& isTemplate">
                                                              <a-button size="small" type="link" @click="handleShowTask(record)"> 任务恢复 </a-button>
                                                          </a-menu-item>
                                                          <a-menu-item key="7" v-if="isTemplate">
                                                              <a-button size="small" type="link" @click="handleDailyTask(record)"> 批量延时 </a-button>
                                                          </a-menu-item>
                                                      </a-menu>
                                                  </template>
                                                  <a-button size="small" type="link">
                                                      更多
                                                      <DownOutlined />
                                                  </a-button>
                                              </a-dropdown>
                                              <!-- <a-button type="link"  @click="handlerEdit(record)"> 编辑 </a-button> -->
                                          </a-space>
                                      </div>
                                  </template>
                              </template>
                          </a-table>
                      </div>
                      <!--                          结束重点关注任务-->
                      <a-row v-if="stateLi.keysTaskDataList.length>0">
                          <a-col :span="8" style="padding-left:10px">
                              <span class="task-important"> 任务列表 </span>
                          </a-col>
                      </a-row>
                      <div class="table-box">
                          <a-table
                              bordered
                              rowKey="taskId"
                              :loading="stateLi.tableLoading"
                              :customRow="customRow"
                              :columns="stateLi.columns"
                              :data-source="stateLi.dataList"
                              :pagination="false"
                              :row-class-name="(_record, index) => (index % 2 === 1 ? 'table-striped' : null)"
                              :scroll="{ x: scrollX, y: stateLi.dataList.length && stateLi.keysTaskDataList.length ? '340px' : (stateLi.dataList.length ? '580px' : '') }"
                              @resizeColumn="handleTaskResizeColumn"
                          >
                              <template #bodyCell="{ column, record, text }">
                                  <template v-if="column.dataIndex === 'taskStatusOnOrOff'">
                                      <a-switch :checked="record['taskStatusOnOrOff']" :disabled="record.nodeType === 'MENU' || !stateLi.projectManager" @click="changeTaskStatusOnOrOff(record)" />
                                  </template>
                                  <!--                                新-任务进度-->
                                  <template v-if="column.dataIndex === 'taskSchedule'">
                                      <a-progress :percent="record.taskSchedule" status="active" @click="changeTaskSchedule(record.finishPermission,record.taskSchedule,record.taskId,record.taskStatus)" />
                                  </template>
                                  <!--                                end新-任务进度-->
                                  <!-- 新-审核标准字段 -->
                                  <template v-if="column.dataIndex === 'assessorStandard'">
                                      <a-tooltip @mouseenter="handlerGetStandard(record)" placement="top" :overlayStyle="standardStyle" color="#fff">
                                          <template #title>
                                              <p style="color:#262626;margin:0" v-for="(item,index) in stateLi.standardList" :key="index">{{item}}</p>
                                          </template>
                                          <div style="min-width:70px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;">{{text}}</div>
                                      </a-tooltip>
                                  </template>
                                  <!-- 审核标准 -->
                                  <template v-if="column.dataIndex === 'unclosedRiskNumber' || column.dataIndex === 'riskNumber'">
                                      <a @click="handlerShowRisks(record, column.dataIndex === 'unclosedRiskNumber' ? '未关闭' : '全部')">
                                          {{ text }}
                                      </a>
                                  </template>
                                  <!-- 附件模板 -->
                                  <template v-if="column.dataIndex ==='actionTaskCount'">
                                      <a @click="handlerShowAction(record)">
                                          {{ text }}
                                      </a>
                                  </template>
                                  <template v-if="column.dataIndex === 'attachmentTemplate'">
                                      <!--                                  预览/下载-->
                                      <div v-for="(item, index) in record.attachmentTemplateList" :key="index">
                                          <a-dropdown>
                    <span style="overflow: hidden; white-space: nowrap; text-overflow: ellipsis; display: block " :title="item.name">
                      {{ item.name }}
                    </span>
                                              <template #overlay>
                                                  <a-menu>
                                                      <a-menu-item>
                                                          <a-button style="width:100%" type="link" size="small" :disabled="!item.type.startsWith('image')" @click="previewAttachment(item)">预览</a-button>
                                                      </a-menu-item>
                                                      <a-menu-item>
                                                          <a-button style="width:100%" type="link" size="small" @click="attachmentTemplateDownLoad(item)">下载</a-button>
                                                      </a-menu-item>
                                                  </a-menu>
                                              </template>
                                          </a-dropdown>
                                      </div>
                                      <!--                                  预览/下载-->
                                  </template>
                                  <template v-if="column.dataIndex === 'milepostName'">
                                      {{text}}
                                  </template>
                                  <template v-if="column.dataIndex === 'dependencyTaskName'"> {{record.dependencyTaskIndex}} {{text}} </template>
                                  <!--                                SOP-->
                                  <template v-if="column.dataIndex === 'taskDependency'">
                                      <a-tooltip placement="top" :overlayStyle="standardStyle" color="#fff">
                                          <template #title>
                                              <p v-for="(item,index) in handlerGetSpace(record.taskDependency)" :key="index" style="color:#262626;margin:0">{{item}}</p>
                                          </template>
                                          <div class="finish-standard">{{ text }}</div>
                                      </a-tooltip>
                                  </template>
                                  <!--                                SOP-->
                                  <!-- 完成标准 -->
                                  <template v-if="column.dataIndex === 'finishStandard'">
                                      <a-tooltip placement="top" :overlayStyle="standardStyle" color="#fff">
                                          <template #title>
                                              <p v-for="(item,index) in handlerGetSpace(record.finishStandard)" :key="index" style="color:#262626;margin:0">{{item}}</p>
                                          </template>
                                          <div class="finish-standard">{{ text }}</div>
                                      </a-tooltip>
                                  </template>
                                  <template v-if="column.dataIndex === 'taskRemarks'">
                                      <a-tooltip placement="top" :overlayStyle="standardStyle" color="#fff">
                                          <template #title>
                                              <p v-for="(item,index) in handlerGetSpace(record.taskRemarks)" :key="index" style="color:#262626;margin:0">{{item}}</p>
                                          </template>
                                          <div class="finish-standard">{{ text }}</div>
                                      </a-tooltip>
                                  </template>
                                  <template v-if="column.dataIndex === 'description'">
                                      <a-tooltip placement="top" :overlayStyle="standardStyle" color="#fff">
                                          <template #title>
                                              <p v-for="(item,index) in handlerGetSpace(record.description)" :key="index" style="color:#262626;margin:0">{{item}}</p>
                                          </template>
                                          <div class="finish-standard">{{ text }}</div>
                                      </a-tooltip>
                                  </template>
                                  <template v-if="column.dataIndex === 'taskName'">
                                      <div v-if="record.collaborate==='协作任务'">
                                          <div class="task-collaborate">协作任务</div>

                                          <a-tooltip placement="top" :overlayStyle="standardStyle" color="#fff">
                                              <template #title>
                                                  <p style="color:#262626;margin:0">{{text}}</p>
                                              </template>
                                              <div :class="['task-name-title', {'task-name-title-right': record.collaborate==='协作任务'}]">
                                                  {{ text }}

                                              </div>
                                          </a-tooltip>
                                      </div>
                                      <div v-else>
                                          <div class="task-name" v-if="isTemplate">
                                              <div v-if='record.mark==="里程碑"' :class="{'task-milestone':record.mark === '里程碑','task-milestone-right':record.mark === '里程碑'&&record.critialPath}"
                                              >里程碑</div
                                              >
                                              <div v-else-if='record.mark==="初验"' :class="{'task-first':record.mark === '初验','task-first-right':record.mark === '初验'&&record.critialPath}"></div>
                                              <div
                                                  v-else-if='record.mark==="终验"'
                                                  class="task-over"
                                                  :class="{'task-over':record.mark === '终验','task-over-right':record.mark === '终验'&&record.critialPath}"
                                              ></div>
                                              <div v-if="record.critialPath" class="critical-path">关键路径</div>
                                              <div
                                                  :class="{ 'is-first-no': record.mark === null&&!record.critialPath, 'is-first': record.mark !== null,'is-first-path': record.mark !== null&&record.critialPath ,'is-first-path-no-mark': record.mark === null&&record.critialPath}"
                                              >
                                                  <a-tooltip placement="top" :overlayStyle="standardStyle" color="#fff">
                                                      <template #title>
                                                          <p style="color:#262626;margin:0">{{record.taskIndex }} {{text}}</p>
                                                      </template>
                                                      <span class="task-name-title">{{record.taskIndex }} {{text}}</span>
                                                  </a-tooltip>
                                              </div>
                                          </div>
                                          <div class="task-name" v-else>
                                              <div v-if='record.mark==="里程碑"' class="task-milestone">里程碑</div>
                                              <div v-else-if='record.mark==="初验"' class="task-first"></div>
                                              <div v-else-if='record.mark==="终验"' class="task-over"></div>

                                              <div :class="{ 'is-first-no': record.mark === null, 'is-first': record.mark !== null }">
                                                  <a-tooltip placement="top" :overlayStyle="standardStyle" color="#fff">
                                                      <template #title>
                                                          <p style="color:#262626;margin:0">{{text}}</p>
                                                      </template>
                                                      <span class="task-name-title">{{text}}</span>
                                                  </a-tooltip>
                                              </div>
                                          </div>
                                      </div>

                                  </template>
                                  <!-- 倒计时 -->
                                  <template v-if="column.dataIndex === 'countDown'">
                                      <div class="count-down-content">
                                          <a-tooltip placement="top" :overlayStyle="standardStyle" color="#fff" v-if="shouldDisplayCountDownWithTooltip(record.labelList, '倒计时')[0]">
                                              <template #title>
                                                  <div class="count-down-hover">
                                                      <p v-for="(item, index) in record.hoverLabelList" :key="index">{{
                                                              item
                                                          }}</p>
                                                  </div>
                                              </template>
                                              <div class="count-down"
                                              >{{
                                                      splitStringByColon(
                                                          shouldDisplayCountDownWithTooltip(record.labelList, '倒计时')[1]
                                                      )[0]








                                                  }}:<span class="weight-num">{{
                                                          splitStringByColon(
                                                              shouldDisplayCountDownWithTooltip(record.labelList, '倒计时')[1]
                                                          )[1]
                                                      }}</span></div
                                              >
                                          </a-tooltip>
                                          <div v-if="shouldDisplayCountDownWithTooltip(record.labelList, '延期')[0]" class="extension-color">
                                              {{
                                                  splitStringByColon(
                                                      shouldDisplayCountDownWithTooltip(record.labelList, '延期')[1]
                                                  )[0]








                                              }}:<span class="weight-num">{{
                                                  splitStringByColon(
                                                      shouldDisplayCountDownWithTooltip(record.labelList, '延期')[1]
                                                  )[1]
                                              }}</span>
                                          </div>

                                          <div
                                              v-if="shouldDisplayCountDownWithTooltip(record.labelList, '项目总监')[0]"
                                              :class="{
                              'all-group-no': hasHyphen(
                                  shouldDisplayCountDownWithTooltip(record.labelList, '项目总监')[1]
                              ),
                              'all-group-yes': hasPlus(
                                  shouldDisplayCountDownWithTooltip(record.labelList, '项目总监')[1]
                              )
                          }"
                                              @click="showScore(record.projectDirectorLabelList,'项目总监')"
                                          >{{
                                                  splitStringByColon(
                                                      shouldDisplayCountDownWithTooltip(record.labelList, '项目总监')[1]
                                                  )[0]








                                              }}:<span class="weight-num">{{
                                                      splitStringByColon(
                                                          shouldDisplayCountDownWithTooltip(record.labelList, '项目总监')[1]
                                                      )[1]
                                                  }}</span></div
                                          >

                                          <div
                                              v-if="shouldDisplayCountDownWithTooltip(record.labelList, '项目经理')[0]"
                                              :class="{
                              'pm-score-no': hasHyphen(
                                  shouldDisplayCountDownWithTooltip(record.labelList, '项目经理')[1]
                              ),
                              'pm-score-yes': hasPlus(
                                  shouldDisplayCountDownWithTooltip(record.labelList, '项目经理')[1]
                              )
                          }"
                                              @click="showScore(record.pmLabelList,'项目经理')"
                                          >{{
                                                  splitStringByColon(
                                                      shouldDisplayCountDownWithTooltip(record.labelList, '项目经理')[1]
                                                  )[0]








                                              }}:<span class="weight-num">{{
                                                      splitStringByColon(
                                                          shouldDisplayCountDownWithTooltip(record.labelList, '项目经理')[1]
                                                      )[1]
                                                  }}</span></div
                                          >

                                          <div
                                              v-if="shouldDisplayCountDownWithTooltip(record.labelList, '任务执行人')[0]"
                                              :class="{
                              'ower-score-no': hasHyphen(
                                  shouldDisplayCountDownWithTooltip(record.labelList, '任务执行人')[1]
                              ),
                              'ower-score-yes': hasPlus(
                                  shouldDisplayCountDownWithTooltip(record.labelList, '任务执行人')[1]
                              )
                          }"
                                              @click="showScore(record.taskOwnerLabelList,'负责人')"
                                          >{{
                                                  splitStringByColon(
                                                      shouldDisplayCountDownWithTooltip(record.labelList, '任务执行人')[1]
                                                  )[0]








                                              }}:<span class="weight-num">{{
                                                      splitStringByColon(
                                                          shouldDisplayCountDownWithTooltip(record.labelList, '任务执行人')[1]
                                                      )[1]
                                                  }}</span></div
                                          >
                                      </div>
                                  </template>
                                  <!-- 倒计时 -->
                                  <template v-if="column.dataIndex === 'taskStatus'">
                                      <div class="task-status-new" @click="getTaskStatus(record.taskId,0)">
                                          <div class="wqd-btn" v-if="text==='未启动'">未启动</div>
                                          <div class="jxz-btn" v-else-if="text==='进行中'">进行中</div>
                                          <div class="wc-btn" v-else-if="text==='完成'">完成</div>
                                          <div class="yq-btn" v-else-if="text==='延期'" color="#F5222D">延期</div>
                                          <div class="yqwc-btn" v-else-if="text==='延期完成'" color="#FAAD14">延期完成</div>
                                          <div class="spz-btn" v-else-if="text==='审批中'" color="#FAAD14">审批中</div>
                                          <div class="wqd-btn" v-else-if="text==='下线'" color="#FAAD14">下线</div>
                                          <div v-else>{{text}}</div>
                                      </div>
                                  </template>
                                  <template v-if="column.dataIndex === 'attachment'">
                                      <!--                                  预览/下载-->
                                      <div v-for="(item, index) in record.ppmEnclosureInfoList" :key="index">
                                          <a-dropdown>
                    <span style="overflow: hidden; white-space: nowrap; text-overflow: ellipsis; display: block " :title="item.name">
                      {{ item.name }}
                    </span>
                                              <template #overlay>
                                                  <a-menu>
                                                      <a-menu-item>
                                                          <a-button style="width:100%" type="link" size="small" :disabled="!item.type.startsWith('image')" @click="previewAttachment(item)">预览</a-button>
                                                      </a-menu-item>
                                                      <a-menu-item>
                                                          <a-button style="width:100%" type="link" size="small" @click="handlerDownload(item)">下载</a-button>
                                                      </a-menu-item>
                                                  </a-menu>
                                              </template>
                                          </a-dropdown>
                                      </div>
                                      <!--                                  预览/下载-->
                                  </template>
                                  <template v-if="column.dataIndex === 'operation'">
                                      <div v-if="record.collaborate!=='协作任务'">
                                          <a-space v-if="record.nodeType === 'MENU'">
                                              <a-button size="small" type="link" :disabled="record.disabledMenuEditBtn" @click="handlerEdit(record)"> 编辑 </a-button>
                                              <a-popconfirm title="确定要删除吗？" :disabled="record.disabledMenuDelBtn" @confirm="handlerDelete(record)">
                                                  <a-button :disabled="record.disabledMenuDelBtn" type="link">删除</a-button>
                                              </a-popconfirm>
                                          </a-space>
                                          <a-space v-else>
                                              <a-button
                                                  size="small"
                                                  v-if="(record.taskStatus === '完成' || record.taskStatus === '延期完成') && !record.instanceId"
                                                  type="link"
                                                  @click="handlerEdit(record, true)"
                                              >
                                                  恢复
                                              </a-button>
                                              <template v-else>
                                                  <a-button size="small" v-if="(!record.taskExamStatus || record.taskExamStatus === '未通过') && isTemplate" type="link" @click="handleStart(record)">
                                                      开始
                                                  </a-button>
                                                  <a-button size="small" v-else type="link" @click="beforeOk(record)"> 完成 </a-button>
                                              </template>
                                              <a-divider style="margin:0;border-color: #3875FF" type="vertical" />
                                              <a-button size="small" type="link" :disabled="record.disabledEditBtn" @click="handlerEdit(record)"> 编辑 </a-button>
                                              <a-divider style="margin:0;border-color: #3875FF" type="vertical" />
                                              <a-dropdown>
                                                  <template #overlay>
                                                      <a-menu @click="handleMenuClick">
                                                          <a-menu-item key="1" v-if="!isTemplate">
                                                              <a-popconfirm title="确定要删除吗？" :disabled="record.disabledDelBtn" @confirm="handlerDelete(record)">
                                                                  <a-button size="small" :disabled="record.disabledDelBtn" type="link">删除</a-button>
                                                              </a-popconfirm>
                                                          </a-menu-item>
                                                          <a-menu-item key="2">
                                                              <a-button size="small" type="link" @click="handlerWarning(record)"> 预警 </a-button>
                                                          </a-menu-item>

                                                          <a-menu-item key="3">
                                                              <a-button size="small" type="link" :disabled="record.disabledNoteBtn" @click="handlerShowNotes(record)"> 历史备注 </a-button>
                                                          </a-menu-item>
                                                          <a-menu-item key="4">
                                                              <a-button
                                                                  size="small"
                                                                  type="link"
                                                                  v-if="(record.taskStatus === '完成' || record.taskStatus === '延期完成') && !record.instanceId"
                                                                  @click="handleSup(record)"
                                                              >
                                                                  补传附件
                                                              </a-button>
                                                          </a-menu-item>
                                                          <a-menu-item key="4">
                                                              <a-button size="small" type="link" @click="handleShowFaq(record)"> 查看FAQ </a-button>
                                                          </a-menu-item>
                                                          <a-menu-item key="5" v-if="record.hidden==='false' && isTemplate">
                                                              <a-button size="small" type="link" @click="handleHiddenTask(record)"> 任务隐藏 </a-button>
                                                          </a-menu-item>
                                                          <a-menu-item key="6" v-if="record.hidden==='true'&& isTemplate">
                                                              <a-button size="small" type="link" @click="handleShowTask(record)"> 任务恢复 </a-button>
                                                          </a-menu-item>
                                                          <a-menu-item key="7" v-if="isTemplate">
                                                              <a-button size="small" type="link" @click="handleDailyTask(record)"> 批量延时 </a-button>
                                                          </a-menu-item>
                                                      </a-menu>
                                                  </template>
                                                  <a-button size="small" type="link">
                                                      更多
                                                      <DownOutlined />
                                                  </a-button>
                                              </a-dropdown>
                                              <!-- <a-button type="link"  @click="handlerEdit(record)"> 编辑 </a-button> -->
                                          </a-space>
                                      </div>
                                  </template>
                              </template>
                          </a-table>
                      </div>
                  </div>
              </div>
              <!--任务隐藏/恢复-->
              <a-modal :visible="isTaskShow.taskShowVisible" :title="isTaskShow.showTitle" @ok="showOrHideTask" centered @cancel="taskShowCancel">
                  <p> 被隐藏的任务将取消一切任务加减分； </p>
                  <p> 任务恢复后将根据计划结束时间重新计算加减分，请通过编辑及时变更； </p>
                  <p> 是否确认{{isTaskShow.text}}？ </p>
              </a-modal>
              <!--任务隐藏/恢复-->
              <!--                      批量延时-->
              <a-modal
                  :visible="batchDelay.delayVisible"
                  title="批量延时"
                  centered
                  width="800px"
                  @ok="confirmDelay"
                  @cancel="batchDelayCancel"
                  :ok-button-props="{loading:dailyLoading}"
                  :body-style="{
paddingBottom:0
}"
              >
                  <p>
                      请输入批量延时天数，确认后该任务以及所有设置该任务为依赖任务的非完成状态任务（含这些任务的被依赖任务）将全部按照天数（排除节假日、周日）向后调整计划开始和结束时间；<br />
                      PMO手动调整无需审批，项目总监、项目经理手动调整后需通过PMO审批；<br />
                      所有通过批量延时改变计划开始和结束时间的任务，提前完成将不再加分；<br />
                      所有通过批量延时改变计划开始和结束时间的任务，将通过新的计划开始时间判断任务的延期未启动天数加减分<br />
                      所有通过批量延时改变计划开始和结束时间的任务，将通过新的计划结束时间判断任务的延期加减分；<br />
                      所有通过批量延时改变计划开始和结束时间的任务，如果加减分已通过月度绩效结算发放工资不会进行补加补减；<br />
                  </p>
                  <div class="batch-line"></div>
                  <a-form :model="batchDelay.model" ref="batchDelayRef">
                      <a-row>
                          <a-col :span="12">
                              <a-form-item label="延期天数" :rules="[{ required: true, message: '请输入延期天数', trigger: 'blur' }]" name="count">
                                  <a-input-number v-model:value="batchDelay.model.count" style="width: 100%"></a-input-number>
                              </a-form-item>
                          </a-col>
                      </a-row>
                  </a-form>
              </a-modal>
              <!--                      批量延时-->
              <a-modal
                  :visible="stateLi.visible"
                  :title="`${current.taskId ? (current.restore ? '恢复' : '修改') : '新增'}任务`"
                  destroyOnClose
                  centered
                  width="50%"
                  :ok-button-props="{ disabled: btnLoading }"
                  :getContainer="getModalContainer"
                  @cancel="handlerCancel"
                  @ok="beforeSubmit"
              >
                  <a-form ref="formRef" :model="stateLi.ppmTaskFromList">
                      <div v-for="(item, index) in stateLi.ppmTaskFromList" :key="index" class="form-item">
                          <div class="form-content">
                              <a-row class="one-line">
                                  <a-col :span="24">
                                      <a-form-item label="任务类型" :name="[index, 'nodeType']" :rules="{ required: true, message: '请选择任务类型!' }">
                                          <a-select
                                              v-model:value="stateLi.ppmTaskFromList[index].nodeType"
                                              :disabled="current.taskId"
                                              showSearch
                                              :options="[
{
label: '父级任务',
value: 'MENU'
},
{
label: '子任务',
value: 'TASK'
}
]"
                                          />
                                      </a-form-item>
                                  </a-col>
                              </a-row>
                              <a-row>
                                  <a-col :span="12">
                                      <a-form-item label="任务名称" :name="[index, 'taskName']" :rules="{ required: true, message: '请输入任务名称!' }">
                                          <a-input placeholder="请输入任务名称" v-model:value="stateLi.ppmTaskFromList[index].taskName" :disabled="isTemplate" />
                                      </a-form-item>
                                  </a-col>
                                  <a-col :span="12">
                                      <a-form-item label="任务优先级" :name="[index, 'priority']" :rules="{ required: true, message: '请选择任务优先级!' }">
                                          <a-select
                                              placeholder="请选择任务优先级"
                                              v-model:value="stateLi.ppmTaskFromList[index].priority"
                                              showSearch
                                              :options="[
{ label: '最高', value: 'HIGHEST' },
{ label: '高', value: 'HIGH' },
{ label: '中', value: 'MEDIUM' },
{ label: '低', value: 'LOW' },
{ label: '最低', value: 'LOWEST' }
]"
                                          />
                                      </a-form-item>
                                  </a-col>
                              </a-row>
                              <a-row>
                                  <a-col :span="12">
                                      <a-form-item label="项目阶段" :name="[index, 'milepostId']" :rules="{ required: true, message: '请选择项目阶段!' }">
                                          <a-select
                                              placeholder="请选择项目阶段"
                                              v-model:value="stateLi.ppmTaskFromList[index].milepostId"
                                              showSearch
                                              :options="stateLi.milepostList"
                                              :field-names="{ label: 'milepostName', value: 'milepostId' }"
                                              @focus="getMilepostList"
                                              @change="handlerMilepostIdChange(index)"
                                              :filter-option="(input, option) => {
return option.milepostName.toLowerCase().indexOf(input.toLowerCase()) >= 0
}
"
                                          />
                                      </a-form-item>
                                  </a-col>
                                  <a-col :span="12">
                                      <a-form-item label="父级任务">
                                          <a-tree-select
                                              placeholder="请选择父级任务"
                                              v-model:value="stateLi.ppmTaskFromList[index].parentId"
                                              allowClear
                                              showSearch
                                              :tree-data="stateLi.parentListMap[index]"
                                              :field-names="{ label: 'taskName', value: 'taskId' }"
                                              :filter-option="(input, option) => {
return option.taskName.toLowerCase().indexOf(input.toLowerCase()) >= 0
}
"
                                          />
                                      </a-form-item>
                                  </a-col>
                              </a-row>
                              <a-row class="one-line">
                                  <a-col :span="24">
                                      <a-form-item label="任务序号" :name="[index, 'taskIndex']" :rules="{ required: true, message: '请输入任务序号!' }">
                                          <a-input placeholder="请输入任务序号" v-model:value="stateLi.ppmTaskFromList[index].taskIndex" :min="0" type="number" />
                                      </a-form-item>
                                  </a-col>
                              </a-row>
                              <template v-if="stateLi.ppmTaskFromList[index].nodeType === 'TASK'">
                                  <a-row class="one-line"> </a-row>
                                  <a-row>
                                      <a-col :span="12">
                                          <a-form-item label="依赖任务">
                                              <a-select
                                                  placeholder="请选择依赖任务"
                                                  v-model:value="stateLi.ppmTaskFromList[index].taskDependency"
                                                  allowClear
                                                  showSearch
                                                  :options="stateLi.taskList"
                                                  @focus="getTaskList()"
                                                  :field-names="{ label: 'taskName', value: 'taskId' }"
                                                  :filter-option="(input, option) => {
return option.taskName.toLowerCase().indexOf(input.toLowerCase()) >= 0
}
"
                                              />
                                          </a-form-item>
                                      </a-col>
                                      <a-col :span="12">
                                          <a-form-item label="任务类型" :name="[index, 'taskType']" :rules="{ required: true, message: '请选择任任务类型!' }">
                                              <a-select
                                                  placeholder="请选择任务类型"
                                                  v-model:value="stateLi.ppmTaskFromList[index].taskType"
                                                  showSearch
                                                  :options="[
{ label: '主任务', value: '主任务' },
{ label: '辅助任务', value: '辅助任务' },
{ label: '其他任务', value: '其他任务' }
]"
                                              />
                                          </a-form-item>
                                      </a-col>
                                  </a-row>

                                  <a-row>
                                      <a-col :span="12">
                                          <a-form-item
                                              label="预计投入工时"
                                              :name="[index, 'workingHours']"
                                              :rules="[
{ required: true, message: '请输入预计投入工时!', trigger: 'blur' },
{ pattern: /^(0\.5|[1-9](\d*)?(\.5)?(\.0)?)$/, message: '请输入大于0的数字(支持0.5的倍数)', trigger: 'blur' }
]"
                                          >
                                              <a-input placeholder="请输入工时(支持0.5的数字)" v-model:value="stateLi.ppmTaskFromList[index].workingHours" type="number" suffix="小时" />
                                          </a-form-item>
                                      </a-col>
                                      <a-col :span="12">
                                          <a-form-item label="任务起止时间" :name="[index, 'allTime']" :rules="{ required: true, message: '请选择任务起止时间!' }">
                                              <a-range-picker v-model:value="stateLi.ppmTaskFromList[index].allTime" valueFormat="YYYY-MM-DD" />
                                          </a-form-item>
                                      </a-col>
                                  </a-row>
                                  <a-row>
                                      <a-col :span="12">
                                          <a-form-item label="任务负责人" :name="[index, 'taskOwner']" :rules="{ required: true, message: '请选择任务负责人!' }">
                                              <a-select
                                                  placeholder="请选择任务负责人"
                                                  v-model:value="stateLi.ppmTaskFromList[index].taskOwner"
                                                  showSearch
                                                  :options="peopleList"
                                                  :field-names="{ label: 'label', value: 'value' }"
                                                  :filter-option="(input, option) => {
return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0
}
"
                                              />
                                          </a-form-item>
                                      </a-col>
                                      <a-col :span="12">
                                          <a-form-item label="是否必须提交输出物" :name="[index, 'output']" :rules="{ required: true, message: '请选择是否必须提交输出物!' }">
                                              <a-select
                                                  placeholder="请选择是否必须提交输出物"
                                                  v-model:value="stateLi.ppmTaskFromList[index].output"
                                                  showSearch
                                                  :options="[
{ label: '是', value: '是' },
{ label: '否', value: '否' }
]"
                                              />
                                          </a-form-item>
                                      </a-col>
                                  </a-row>
                                  <a-row>
                                      <a-col :span="12">
                                          <a-form-item label="审核员" :name="[index, 'assessorName']" :rules="{ required: true, message: '请选择审核员!' }">
                                              <a-select
                                                  placeholder="请选择审核员"
                                                  v-model:value="stateLi.ppmTaskFromList[index].assessorName"
                                                  showSearch
                                                  :options="peopleList"
                                                  :field-names="{ label: 'label', value: 'value' }"
                                                  :filter-option="(input, option) => {
return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0
}
"
                                              />
                                          </a-form-item>
                                      </a-col>
                                  </a-row>
                                  <a-row class="one-line">
                                      <a-col :span="24">
                                          <a-form-item label="任务执行人" :name="[index, 'taskParticipantList']" :rules="{ required: true, message: '请选择任务执行人!' }">
                                              <a-select
                                                  placeholder="请选择任务执行人"
                                                  v-model:value="stateLi.ppmTaskFromList[index].taskParticipantList"
                                                  showSearch
                                                  mode="multiple"
                                                  :options="peopleList"
                                                  :field-names="{ label: 'label', value: 'value' }"
                                                  :filter-option="(input, option) => {
return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0
}
"
                                              />
                                          </a-form-item>
                                      </a-col>
                                      <a-col v-if="taskPeopleList.length > 0">
                                          <div style="width:700px;margin-left:115px;margin-bottom:28px">
                                              <a href="javascript:;" v-for="(item, num) in taskPeopleList" @click="handlerAddPeople(item.value, index)"
                                              ><span style="margin:0 5px">{{
                                                      item.value }}</span></a
                                              >
                                          </div>
                                      </a-col>
                                  </a-row>
                                  <a-row class="one-line" v-if="!isTemplate">
                                      <a-col :span="24">
                                          <a-form-item label="验收标准">
                                              <a-textarea v-model:value="stateLi.ppmTaskFromList[index].acceptanceCriteria" placeholder="请输入验收标准" />
                                          </a-form-item>
                                      </a-col>
                                  </a-row>
                                  <!-- <a-row class="one-line" v-if="!isTemplate">
                    <a-col :span="24">
                    <a-form-item label="甲方工作事项" :name="[index, 'taskRemarks']">
                    <a-textarea :maxlength="200" v-model:value="stateLi.ppmTaskFromList[index].taskRemarks" placeholder="请输入甲方工作事项" />
                    </a-form-item>
                    </a-col>
                    </a-row> -->
                                  <a-row class="one-line">
                                      <a-col :span="24">
                                          <a-form-item label="备注">
                                              <a-textarea placeholder="请输入备注" v-model:value="stateLi.ppmTaskFromList[index].description" />
                                          </a-form-item>
                                      </a-col>
                                  </a-row>
                                  <a-row class="one-line" v-if="current.taskId">
                                      <a-col :span="24">
                                          <a-form-item label="变更原因" :name="[index, 'reasonsChange']" :rules="{ required: true, message: '请填写变更原因!' }">
                                              <a-textarea placeholder="请输入变更原因" v-model:value="stateLi.ppmTaskFromList[index].reasonsChange" />
                                          </a-form-item>
                                      </a-col>
                                  </a-row>
                              </template>
                          </div>
                          <a v-if="!current.taskId" class="del" @click="handlerDeleteFormItem(index)">删除</a>
                      </div>
                  </a-form>
                  <a-button v-if="!current.taskId" type="primary" ghost class="add-btn" @click="handlerAddFormItem">
                      <plus-outlined />
                      添加
                  </a-button>
              </a-modal>
              <!--                      模板项目编辑弹窗-->
              <a-modal
                  :visible="stateLi.templateEditVisible"
                  title="修改任务"
                  destroyOnClose
                  centered
                  width="50%"
                  :ok-button-props="{ disabled: btnLoading }"
                  :getContainer="getModalContainer"
                  @cancel="handlerCancel"
                  @ok="beforeSubmit"
              >
                  <a-form ref="formRef" :model="stateLi.ppmTaskFromList">
                      <div v-for="(item, index) in stateLi.ppmTaskFromList" :key="index" class="form-item">
                          <div class="form-content">
                              <template v-if="stateLi.ppmTaskFromList[index].nodeType === 'TASK'">
                                  <a-row class="one-line"></a-row>
                                  <a-row>
                                      <a-col :span="12">
                                          <a-form-item
                                              label="预计投入工时"
                                              :name="[index, 'workingHours']"
                                              :rules="[
{ required: true, message: '请输入预计投入工时!', trigger: 'blur' },
{ pattern: /^(0\.5|[1-9](\d*)?(\.5)?(\.0)?)$/, message: '请输入大于0的数字(支持0.5的倍数)', trigger: 'blur' }
]"
                                          >
                                              <a-input placeholder="请输入工时(支持0.5的数字)" v-model:value="stateLi.ppmTaskFromList[index].workingHours" type="number" suffix="小时" />
                                          </a-form-item>
                                      </a-col>
                                      <a-col :span="12">
                                          <a-form-item label="任务起止时间" :name="[index, 'allTime']" :rules="{ required: true, message: '请选择任务起止时间!' }">
                                              <a-range-picker disabled v-model:value="stateLi.ppmTaskFromList[index].allTime" valueFormat="YYYY-MM-DD" />
                                          </a-form-item>
                                      </a-col>
                                  </a-row>

                                  <a-row class="one-line">
                                      <a-col :span="24">
                                          <a-form-item label="任务执行人" :name="[index, 'taskParticipantList']" :rules="{ required: true, message: '请选择任务执行人!' }">
                                              <a-select
                                                  placeholder="请选择任务执行人"
                                                  v-model:value="stateLi.ppmTaskFromList[index].taskParticipantList"
                                                  showSearch
                                                  mode="multiple"
                                                  :options="peopleList"
                                                  :field-names="{ label: 'label', value: 'value' }"
                                                  :filter-option="(input, option) => {
return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0
}
"
                                              />
                                          </a-form-item>
                                      </a-col>
                                      <a-col v-if="taskPeopleList.length > 0">
                                          <div style="width:700px;margin-left:115px;margin-bottom:28px">
                                              <a href="javascript:;" v-for="(item, num) in taskPeopleList" @click="handlerAddPeople(item.value, index)"
                                              ><span style="margin:0 5px">{{
                                                      item.value }}</span></a
                                              >
                                          </div>
                                      </a-col>
                                  </a-row>

                                  <a-row class="one-line">
                                      <a-col :span="24">
                                          <a-form-item label="备注">
                                              <a-textarea placeholder="请输入备注" v-model:value="stateLi.ppmTaskFromList[index].description" />
                                          </a-form-item>
                                      </a-col>
                                  </a-row>
                                  <a-row class="one-line" v-if="current.taskId">
                                      <a-col :span="24">
                                          <a-form-item label="变更原因" :name="[index, 'reasonsChange']" :rules="{ required: true, message: '请填写变更原因!' }">
                                              <a-textarea placeholder="请输入变更原因" v-model:value="stateLi.ppmTaskFromList[index].reasonsChange" />
                                          </a-form-item>
                                      </a-col>
                                  </a-row>
                              </template>
                          </div>
                          <a v-if="!current.taskId" class="del" @click="handlerDeleteFormItem(index)">删除</a>
                      </div>
                  </a-form>
              </a-modal>
              <!--                      模板项目编辑弹窗-->
              <a-modal
                  :visible="stateLi.closeVisible"
                  title="关闭风险"
                  destroyOnClose
                  centered
                  width="40%"
                  :ok-button-props="{ disabled: btnLoading }"
                  @cancel="stateLi.closeVisible = false"
                  @ok="handlerClose"
              >
                  <a-form ref="closeFormRef" :model="closeCurrent">
                      <div class="form-content">
                          <a-row>
                              <a-col :span="24">
                                  <a-form-item label="风险关闭备注" name="riskRemarks" :rules="{ required: true, message: '请输入风险关闭备注!' }">
                                      <a-textarea v-model:value="closeCurrent.riskRemarks" :rows="5" />
                                  </a-form-item>
                              </a-col>
                          </a-row>
                      </div>
                  </a-form>
              </a-modal>

              <a-modal
                  :visible="stateLi.visibleNotes"
                  title="历史备注"
                  width="40vw"
                  centered
                  destroyOnClose
                  :footer="null"
                  :getContainer="getModalContainer"
                  @cancel="stateLi.visibleNotes = false"
              >
                  <a-table
                      bordered
                      rowKey="taskId"
                      :customRow="customRow"
                      :columns="stateLi.notesColumns"
                      :data-source="stateLi.noteData.descriptionDataList"
                      :pagination="false"
                      :row-class-name="(_record, index) => (index % 2 === 1 ? 'table-striped' : null)"
                  />
              </a-modal>

              <a-modal :visible="stateLi.visibleRisk" title="风险" width="80vw" centered destroyOnClose :footer="null" :getContainer="getModalContainer" @cancel="stateLi.visibleRisk = false">
                  <a-table
                      bordered
                      rowKey="taskId"
                      :customRow="customRow"
                      :columns="stateLi.riskColumns"
                      :data-source="stateLi.riskList"
                      :pagination="false"
                      :row-class-name="(_record, index) => (index % 2 === 1 ? 'table-striped' : null)"
                  >
                      <template #bodyCell="{ column, record }">
                          <template v-if="column.dataIndex === 'operation'">
                              <a-button type="link" :disabled="record.riskState === '关闭'" @click="handlerBeforeClose(record)">关闭</a-button>
                          </template>
                      </template>
                  </a-table>
              </a-modal>

              <a-modal
                  :visible="stateLi.visibleFile"
                  title="上传附件"
                  destroyOnClose
                  centered
                  :ok-button-props="{ disabled: btnLoading }"
                  :getContainer="getModalContainer"
                  @cancel="stateLi.visibleFile = false"
                  @ok="handlerUpdateFile"
              >
                  <template #footer>
                      <a-button key="back" type="primary" @click="downLoadTemplate">下载模板</a-button>
                      <a-button key="back" @click="stateLi.visibleFile = false">取消</a-button>
                      <a-button key="submit" type="primary" @click="handlerUpdateFile">确定</a-button>
                  </template>
                  <a-upload :file-list="stateLi.fileList" :before-upload="handlerUpload" @remove="handleRemove" accept=".xlsx,.ppt,.pdf,.PDF, image/*, .docx, .rp, .xls">
                      <a-button type="primary">
                          <upload-outlined />
                          上传
                      </a-button>
                  </a-upload>
                  <span>支持格式：image/*,.xlsx,.xls,.docx,.rp,.ppt,.pptx,.pdf</span>
              </a-modal>

              <!--                      修改任务进度-->
              <a-modal :visible="stateLi.taskScheduleVisible" title="编辑任务进度" @ok="taskScheduleSubmit" @cancel="stateLi.taskScheduleVisible=false">
                  <a-form ref="taskScheduleRef" :model="stateLi.taskScheduleModel">
                      <a-form-item name="taskSchedule" label="任务进度" :rules="[{required:true,message:'请输入任务进度',trigger:'blur'}]">
                          <a-input-number v-model:value="stateLi.taskScheduleModel.taskSchedule" :min="0" max="100" :precision="0" style="width:100%"></a-input-number>
                      </a-form-item>
                  </a-form>
              </a-modal>
              <!--                      修改任务进度-->
              <a-modal
                  :visible="stateLi.okVisible"
                  title="检查清单列表"
                  destroyOnClose
                  centered
                  width="40%"
                  :getContainer="getModalContainer"
                  @cancel="stateLi.okVisible = false"
                  @ok="handlerOk"
              >
                  <div style="border-bottom:1px solid #d9d9d9;margin-bottom:10px;">
                      <div v-for="(item, index) in ppmCheckList" :key="index" class="checkbox-group">
                          <div class="label">{{ item.name }}</div>
                          <a-checkbox v-for="(item2, index2) in item.value" :key="index2" :checked="ppmCheckedList.includes(item2.checkEntryId)" @change="ppmCheckedListChange(item2.checkEntryId)">
                              {{ item2.checkEntry }}
                          </a-checkbox>
                      </div>
                  </div>
                  <a-upload :file-list="stateLi.fileList" :before-upload="handlerUpload" @remove="handleRemove" accept=".xlsx,.ppt,.pdf,.PDF, image/*, .docx, .rp, .xls">
                      <a-button type="primary">
                          <upload-outlined />
                          上传
                      </a-button>
                  </a-upload>
                  <span>支持格式：image/*,.xlsx,.xls,.docx,.rp,.ppt,.pptx,.pdf</span>
              </a-modal>

              <!--                      模板项目-风险预警-->
              <a-modal v-model:visible="stateLi.warringVisible" title="新增任务风险" @ok="handleTemplateRiskOk">
                  <a-form :model="stateLi.templateRisk" ref="templateRiskRef">
                      <a-row>
                          <a-col :span="24">
                              <a-form-item label="任务名称" name="taskName" :rules="[{required:true,message:'请输入任务名称',trigger:'blur'}]">
                                  <a-input v-model:value="stateLi.templateRisk.taskName" disabled></a-input>
                              </a-form-item>
                          </a-col>
                          <a-col :span="24">
                              <a-form-item label="风险描述" name="riskDescription" :rules="[{required:true,message:'请输入风险描述',trigger:'blur'}]">
                                  <a-input v-model:value="stateLi.templateRisk.riskDescription"></a-input>
                              </a-form-item>
                          </a-col>
                          <a-col :span="24">
                              <a-form-item label="解决方案" name="solution" :rules="[{required:true,message:'请输入解决方案',trigger:'blur'}]">
                                  <a-input v-model:value="stateLi.templateRisk.solution"></a-input>
                              </a-form-item>
                          </a-col>
                      </a-row>
                  </a-form>
              </a-modal>
              <!--                      end模板项目-风险预警-->
              <!-- 新-模板项目检查清单弹出框 -->
              <a-modal :visible="stateLi.templateOkVisible" title="完成任务" destroyOnClose centered width="40%" :getContainer="getModalContainer" @cancel="stateLi.templateOkVisible = false">
                  <div style="border-bottom:1px solid #d9d9d9;margin-bottom:10px;">
                      <!-- 完成标准 -->
                      <div class="new-check">
                          <div class="label">完成标准</div>
                      </div>
                      <div class="checkbox-group" v-for="(item,index) in CompletionCheckListCheckList" :key="index">
                          <a-checkbox v-model:checked="item.selected">
                              {{ item.content }}
                          </a-checkbox>
                      </div>
                      <!-- 审核标准 -->
                      <div class="new-check" v-if="ppmTemplateCheckList.length>0">
                          <div class="label">审核标准及注意事项</div>
                      </div>
                      <div v-for="(item, index) in ppmTemplateCheckList" :key="index" class="checkbox-group">
                          <div v-html="formatContent(item.content)"></div>
                      </div>
                      <!-- 审核标准 -->
                      <!--                        sop-->
                      <div class="new-check" v-if="sopList[0].contentList.length>0">
                          <div class="label">SOP</div>
                      </div>
                      <div class="checkbox-group">
                          <a-checkbox v-for="(msg,index) in sopList[0].contentList" :key="index" v-model:checked="msg.selected">
                              {{msg.msg}}
                          </a-checkbox>
                      </div>
                      <!--                        sop-->
                  </div>

                  <template #footer>
                      <a-button key="back" type="primary" @click="downLoadTemplate">下载模板</a-button>
                      <a-button key="back" @click="stateLi.templateOkVisible = false">取消</a-button>
                      <a-button key="back" @click="handleSubmitSop">暂存SOP</a-button>
                      <a-button key="submit" type="primary" :loading="templateOkDisabled" @click="handlerTemplateOk">提交审批</a-button>
                  </template>
                  <a-upload :file-list="stateLi.fileList" :multiple="true" :before-upload="handlerUpload" @remove="handleRemove" accept=".xlsx,.ppt,.pdf,.PDF, image/*, .docx, .rp, .xls">
                      <a-button type="primary">
                          <upload-outlined />
                          上传
                      </a-button>
                  </a-upload>
                  <span>支持格式：image/*,.xlsx,.xls,.docx,.rp,.ppt,.pptx,.pdf</span>
              </a-modal>
              <!-- 模板项目检查清单弹出框 -->
          </div>
      </a-spin>
      <!--                  sop-->
      <a-modal v-model:visible="sopVisible" title="SOP" :closable="false" :footer="null" :width="1000" :centered="true" :destroyOnClose="true" :keyboard="false" :maskClosable="false">
          <div class="sop-div">
              <div class="one-line-sop">
                  <div class="one-left">完成标准</div>
                  <div class="one-right">
                      <p style="color: #262626; margin: 0" v-for="(item, index) in handlerGetSpace(sopMsg[0].finishStandard)" :key="index">{{ item }}</p>
                  </div>
              </div>
              <div class="one-line-sop">
                  <div class="one-left">审核标准及注意事项</div>
                  <div class="one-right">
                      <p style="color: #262626; margin: 0" v-for="(item, index) in handlerGetSpace(sopMsg[0].assessorStandard)" :key="index">{{ item }}</p>
                  </div>
              </div>
              <div class="one-line-sop">
                  <div class="one-left">SOP</div>
                  <div class="one-right">
                      <p class="task-dependency">{{ sopMsg[0].taskDependency }}</p>
                  </div>
              </div>
              <div class="one-line-sop">
                  <div class="one-left">甲方工作事项</div>
                  <div class="one-right">
                      <p style="color: #262626; margin: 0" v-for="(item, index) in handlerGetSpace(sopMsg[0].taskRemarks)" :key="index">{{ item }}</p>
                  </div>
              </div>
              <div class="one-line-sop">
                  <div class="one-left">附件模板</div>
                  <div class="one-right">
                      <a
                          v-for="(item, index) in sopMsg[0].attachmentTemplateList"
                          :key="index"
                          href="javascript:"
                          @click="attachmentTemplateDownLoad(item)"
                          :class="[
'block',
index > 2 && !sopMsg[0].attachmentShowAll ? 'hide' : ''
]"
                      >
                          {{ item.name }}
                      </a>
                  </div>
              </div>
              <div class="two-line-sop">
                  <div class="two-item">
                      <div class="two-left">任务负责人</div>
                      <div class="two-right">{{ sopMsg[0].taskOwner }}</div>
                  </div>
                  <div class="two-item">
                      <div class="two-left">审核员</div>
                      <div class="two-right">{{ sopMsg[0].assessorName }}</div>
                  </div>
              </div>
          </div>
          <a-button type="primary" class="sop-btn" @click="sopVisible = false">我已知悉</a-button>
      </a-modal>
      <!--                  结束sop-->

      <!--                  预览-->
      <a-modal v-model:visible="stateF.previewVisible" @cancel="handleCancel" width="1000px" title="图片预览" :footer="null">
          <div v-if="stateF.isImagePreview">
              <img :src="stateF.previewImage" alt="附件" style="width: 100%;" />
          </div>
          <div v-else>
              <iframe :src="stateF.previewFileUrl" style="width: 100%; height: 500px;"></iframe>
          </div>
      </a-modal>
      <!--                  预览-->
      <!--                  补传附件-->
      <a-modal
          :visible="supVisible"
          title="补传附件"
          destroyOnClose
          centered
          :ok-button-props="{ loading: bcfjLoading }"
          :getContainer="getModalContainer"
          @cancel="supVisible = false"
          @ok="handlerSupUpdateFile"
      >
          <a-upload :file-list="supFileList" :multiple="true" :before-upload="handlerSupUpload" @remove="handleSupRemove" accept=".xlsx,.ppt,.pdf,.PDF, image/*, .docx, .rp, .xls">
              <a-button type="primary">
                  <upload-outlined />
                  上传
              </a-button>
          </a-upload>
          <span>支持格式：image/*,.xlsx,.xls,.docx,.rp,.ppt,.pptx,.pdf</span>
      </a-modal>
      <!--                  补传附件-->
      <!--      行动项-->
      <a-modal
          :visible="stateK.visibleAction"
          title="行动项任务"
          width="80vw"
          centered
          class="xdx-table"
          destroyOnClose
          :footer="null"
          @cancel="stateK.visibleAction = false"
          :body-style="{ maxHeight: '600px', overflowY: 'auto' }"
          :maskClosable="false"
      >
          <!--                    <div class="action-select">-->
          <!--                      <a-form-item label="任务状态" style="height: 30px">-->
          <!--                        <a-select-->
          <!--                          :max-tag-count="3"-->
          <!--                          v-model:value="stateK.selectActionStatus"-->
          <!--                          mode="multiple"-->
          <!--                          allow-clear-->
          <!--                          :options="[-->
          <!--                            { label: '未启动', value: '未启动' },-->
          <!--                            { label: '进行中', value: '进行中' },-->
          <!--                            { label: '审批中', value: '审批中' },-->
          <!--                            { label: '延期', value: '延期' },-->
          <!--                            { label: '完成', value: '完成' },-->
          <!--                            { label: '延期完成', value: '延期完成' }-->
          <!--                        ]"-->
          <!--                          style="width: 350px; margin-bottom: 12px"-->
          <!--                          @change="getActionList(currentColumn, stateK.selectActionStatus)"-->
          <!--                        />-->
          <!--                      </a-form-item>-->
          <!--                    </div>-->
          <div class="default-table">
              <a-table
                  bordered
                  rowKey="taskId"
                  :columns="ActionColumns"
                  :data-source="stateK.actionList"
                  :pagination="false"
                  :scroll="{ y: '450px' }"
                  :row-class-name="(_record, index) => (index % 2 === 1 ? 'table-striped' : null)"
              >
                  {{ stateK.actionList }}
                  <template #bodyCell="{ column, record, text }">
                      <template v-if="column.dataIndex === 'taskStatusOnOrOff'">
                          <a-switch :checked="record['taskStatusOnOrOff']" :disabled="record.nodeType === 'MENU' || !actionState.projectManager" @click="changeTaskStatusOnOrOff(record)" />
                      </template>
                      <!--                                新-任务进度-->
                      <template v-if="column.dataIndex === 'taskSchedule'">
                          <a-progress
                              :percent="record.taskSchedule"
                              status="active"
                              @click="
                  changeTaskSchedule(
                      record.finishPermission,
                      record.taskSchedule,
                      record.taskId,
                      record.taskStatus
                  )
              "
                          />
                      </template>
                      <!--                                end新-任务进度-->
                      <!-- 新-审核标准字段 -->
                      <template v-if="column.dataIndex === 'assessorStandard'">
                          <a-tooltip @mouseenter="handlerGetStandard(record)" placement="top" :overlayStyle="standardStyle" color="#fff">
                              <template #title>
                                  <p style="color: #262626; margin: 0" v-for="(item, index) in actionState.standardList" :key="index">{{ item }}</p>
                              </template>
                              <div
                                  style="
                      min-width: 70px;
                      text-overflow: ellipsis;
                      white-space: nowrap;
                      overflow: hidden;
                  "
                              >{{ text }}</div
                              >
                          </a-tooltip>
                      </template>
                      <!-- 审核标准 -->
                      <template v-if="column.dataIndex === 'unclosedRiskNumber' || column.dataIndex === 'riskNumber'">
                          <a
                              @click="
                  handlerActionShowRisks(
                      record.actionTaskId,
                      column.dataIndex === 'unclosedRiskNumber' ? '未关闭' : '全部'
                  )
              "
                          >
                              {{ text }}
                          </a>
                      </template>
                      <!-- 附件模板 -->

                      <template v-if="column.dataIndex === 'attachmentTemplate'">
                          <!--                                  预览/下载-->
                          <div v-for="(item, index) in record.attachmentTemplateList" :key="index">
                              <a-dropdown>
              <span
                  style="
                          overflow: hidden;
                          white-space: nowrap;
                          text-overflow: ellipsis;
                          display: block;
                      "
                  :title="item.name"
              >
                {{ item.name }}
              </span>
                                  <template #overlay>
                                      <a-menu>
                                          <a-menu-item>
                                              <a-button style="width: 100%" type="link" size="small" :disabled="!item.type.startsWith('image')" @click="previewAttachment(item)">预览</a-button>
                                          </a-menu-item>
                                          <a-menu-item>
                                              <a-button style="width: 100%" type="link" size="small" @click="attachmentTemplateDownLoad(item)">下载</a-button>
                                          </a-menu-item>
                                      </a-menu>
                                  </template>
                              </a-dropdown>
                          </div>
                          <!--                                  预览/下载-->
                      </template>
                      <template v-if="column.dataIndex === 'milepostName'">
                          {{ text }}
                      </template>
                      <!-- 倒计时 -->
                      <template v-if="column.dataIndex === 'countDown'">
                          <div class="count-down-content">
                              <a-tooltip placement="top" :overlayStyle="standardStyle" color="#fff" v-if="shouldDisplayCountDownWithTooltip(record.labelList, '倒计时')[0]">
                                  <template #title>
                                      <div class="count-down-hover">
                                          <p v-for="(item, index) in record.hoverLabelList" :key="index">{{
                                                  item
                                              }}</p>
                                      </div>
                                  </template>
                                  <div class="count-down"
                                  >{{
                                          splitStringByColon(
                                              shouldDisplayCountDownWithTooltip(record.labelList, '倒计时')[1]
                                          )[0]



                                      }}:<span class="weight-num">{{
                                              splitStringByColon(
                                                  shouldDisplayCountDownWithTooltip(record.labelList, '倒计时')[1]
                                              )[1]
                                          }}</span></div
                                  >
                              </a-tooltip>
                              <div v-if="shouldDisplayCountDownWithTooltip(record.labelList, '延期')[0]" class="extension-color">
                                  {{
                                      splitStringByColon(
                                          shouldDisplayCountDownWithTooltip(record.labelList, '延期')[1]
                                      )[0]



                                  }}:<span class="weight-num">{{
                                      splitStringByColon(
                                          shouldDisplayCountDownWithTooltip(record.labelList, '延期')[1]
                                      )[1]
                                  }}</span>
                              </div>

                              <div
                                  v-if="shouldDisplayCountDownWithTooltip(record.labelList, '项目总监')[0]"
                                  :class="{
                      'all-group-no': hasHyphen(
                          shouldDisplayCountDownWithTooltip(record.labelList, '项目总监')[1]
                      ),
                      'all-group-yes': hasPlus(
                          shouldDisplayCountDownWithTooltip(record.labelList, '项目总监')[1]
                      )
                  }"
                                  @click="showScore(record.projectDirectorLabelList, '项目总监')"
                              >{{
                                      splitStringByColon(
                                          shouldDisplayCountDownWithTooltip(record.labelList, '项目总监')[1]
                                      )[0]



                                  }}:<span class="weight-num">{{
                                          splitStringByColon(
                                              shouldDisplayCountDownWithTooltip(record.labelList, '项目总监')[1]
                                          )[1]
                                      }}</span></div
                              >

                              <div
                                  v-if="shouldDisplayCountDownWithTooltip(record.labelList, '项目经理')[0]"
                                  :class="{
                      'pm-score-no': hasHyphen(
                          shouldDisplayCountDownWithTooltip(record.labelList, '项目经理')[1]
                      ),
                      'pm-score-yes': hasPlus(
                          shouldDisplayCountDownWithTooltip(record.labelList, '项目经理')[1]
                      )
                  }"
                                  @click="showScore(record.pmLabelList, '项目经理')"
                              >{{
                                      splitStringByColon(
                                          shouldDisplayCountDownWithTooltip(record.labelList, '项目经理')[1]
                                      )[0]



                                  }}:<span class="weight-num">{{
                                          splitStringByColon(
                                              shouldDisplayCountDownWithTooltip(record.labelList, '项目经理')[1]
                                          )[1]
                                      }}</span></div
                              >

                              <div
                                  v-if="shouldDisplayCountDownWithTooltip(record.labelList, '任务执行人')[0]"
                                  :class="{
                      'ower-score-no': hasHyphen(
                          shouldDisplayCountDownWithTooltip(record.labelList, '任务执行人')[1]
                      ),
                      'ower-score-yes': hasPlus(
                          shouldDisplayCountDownWithTooltip(record.labelList, '任务执行人')[1]
                      )
                  }"
                                  @click="showScore(record.taskOwnerLabelList, '负责人')"
                              >{{
                                      splitStringByColon(
                                          shouldDisplayCountDownWithTooltip(record.labelList, '任务执行人')[1]
                                      )[0]



                                  }}:<span class="weight-num">{{
                                          splitStringByColon(
                                              shouldDisplayCountDownWithTooltip(record.labelList, '任务执行人')[1]
                                          )[1]
                                      }}</span></div
                              >
                          </div>
                      </template>
                      <!-- 倒计时 -->
                      <template v-if="column.dataIndex === 'taskStatus'">
                          <div class="wqd-btn" v-if="text === '未启动'">未启动</div>
                          <div class="jxz-btn" v-else-if="text === '进行中'">进行中</div>
                          <div class="wc-btn" v-else-if="text === '完成'">完成</div>
                          <div class="yq-btn" v-else-if="text === '延期'" color="#F5222D">延期</div>
                          <div class="yqwc-btn" v-else-if="text === '延期完成'" color="#FAAD14">延期完成</div>
                          <div class="spz-btn" v-else-if="text === '审批中'" color="#FAAD14">审批中</div>
                          <div class="wqd-btn" v-else-if="text === '下线'" color="#FAAD14">下线</div>
                          <div v-else>{{ text }}</div>
                      </template>
                      <template v-if="column.dataIndex === 'attachment'">
                          <!--                                  预览/下载-->
                          <div v-for="(item, index) in record.ppmEnclosureInfoList" :key="index">
                              <a-dropdown>
              <span
                  style="
                          overflow: hidden;
                          white-space: nowrap;
                          text-overflow: ellipsis;
                          display: block;
                      "
                  :title="item.name"
              >
                {{ item.name }}
              </span>
                                  <template #overlay>
                                      <a-menu>
                                          <a-menu-item>
                                              <a-button style="width: 100%" type="link" size="small" :disabled="!item.type.startsWith('image')" @click="previewAttachment(item)">预览</a-button>
                                          </a-menu-item>
                                          <a-menu-item>
                                              <a-button style="width: 100%" type="link" size="small" @click="handlerDownload(item)">下载</a-button>
                                          </a-menu-item>
                                      </a-menu>
                                  </template>
                              </a-dropdown>
                          </div>
                          <!--                                  预览/下载-->
                      </template>
                      <template v-if="column.dataIndex === 'operation'">
                          <a-button size="small" v-if="record.taskStatus === '未启动'" type="link" @click="handleActionStart(record)"> 开始 </a-button>
                          <a-button size="small" v-else type="link" @click="actionBeforeOk(record)"> 完成 </a-button>
                          <a-divider style="margin: 0; border-color: #3875ff" type="vertical" />
                          <a-button size="small" type="link" :disabled="record.disabledEditBtn" @click="handlerEditAction(record)"> 编辑 </a-button>
                          <a-divider style="margin: 0; border-color: #3875ff" type="vertical" />
                          <a-popconfirm title="确定要删除吗？" :disabled="record.disabledDelBtn" @confirm="handlerDeleteAction(record)">
                              <a-button size="small" :disabled="record.disabledDelBtn" type="link">删除</a-button>
                          </a-popconfirm>
                          <a-divider style="margin: 0; border-color: #3875ff" type="vertical" />
                          <a-button size="small" type="link" :disabled="record.disabledNoteBtn" @click="handlerShowActionNotes(record)"> 历史备注 </a-button>
                      </template>
                  </template>
              </a-table>
          </div>
      </a-modal>
      <!--      行动项-->
  </div>
</template>
<script setup lang="tsx">
import {
  h, ref, reactive, toRaw, markRaw, watch, computed,
  onBeforeMount, onMounted, onBeforeUnmount, onUnmounted, onActivated, onDeactivated
} from "vue";
import { useRoute, useRouter } from 'vue-router';
const router = useRouter();
const route = useRoute();
import { get, post, put, del, request, requestWithHeaders } from '@/utils/http/Axios';
import { cloneDeep, localGet, merge, getDifferenceArray, traversalTreeStructure, checkCaseCondition, renderStringInTemplate, handleBreadcrumbJump, throttle, permission } from '@/utils/index';
import { isNullOrEmpty, isEmptyArr, isNullOrUnDef, isContained, isArray, isEmpty, isObject } from '@/utils/is';
import dayjs from 'dayjs';
import { getPagePcChartsDataSourceConvert } from '@/utils/chart';
import { message, notification, Modal } from 'ant-design-vue'
import { propertyFormatByNumber, propertyFormatByPercentage, propertyFormatByDate } from '@/utils/format';
/*** PUBLISH_EXEGESIS ***
 import UserTableRecords from '@/model/UserTableRecords';
 import { getAppBaseUrl } from '@/utils/index';
 import { sendToken } from "@/hooks/useIframeToken";
 *** PUBLISH_EXEGESIS ***/

import TextTableCell from '@/components/page/tableCell/text.vue';
import NumberTableCell from '@/components/page/tableCell/number.vue';
import ProgressTableCell from '@/components/page/tableCell/progress.vue';
import OptionsTableCell from '@/components/page/tableCell/options.vue';
import DatePickerTableCell from '@/components/page/tableCell/datePicker.vue';
import RangePickerTableCell from '@/components/page/tableCell/rangePicker.vue';
import RangeNumberTableCell from '@/components/page/tableCell/rangeNumber.vue';
import BoolTableCell from '@/components/page/tableCell/bool.vue';
import TableHeaderCell from '@/components/page/TableHeaderCell.vue';

// 获取传入的流程ID
const props = defineProps({
  processInstanceId: {
    type: String
  }
})
const immediateWatch = (source, callback) => {
  watch(source, callback, {deep: true,immediate: true })
}



/* -------------------------- 属性定义 -------------------------- */

const setTimeOutList = [];
const pageLoading = reactive({
  loading: false,
  tip: undefined
});
const authInfo = localGet('app-user-store');

const vid_nv7116jo59_props = reactive({
  visible: false,
})

const vid_zdahlucw2m_props = reactive({
  visible: false,
})

const vid_7tkdmcltrd_props = reactive({
  visible: false,
})

const vid_ba39vq33n9_props = reactive({
  systemSort: [],
  sorter: {},
  editRowSaveLoading: {},
  currentRow: {"projectMilepost":"","taskName":"","taskOwner":"","taskParticipants":"","taskStatus":"","taskFraction":"","taskHourInput":""},
  selectedRowList: {"taskFraction":[],"taskOwner":[],"taskParticipants":[],"projectMilepost":[],"custom3":[],"custom4":[],"taskHourInput":[],"custom1":[],"taskName":[],"custom2":[],"custom7":[],"custom5":[],"taskStatus":[],"custom6":[]},
  totalNumber: "",
  rt_tableConfig: {"layout":{"showHeader":true,"sticky":false,"operationColumnFixed":"default"},"pagination":{"current":1,"pageSizeOptions":"10,20,30,40","enable":false,"showTotal":false,"hideOnSinglePage":false,"pageSize":10,"simple":false,"sync":true,"showQuickJumper":false,"showSizeChanger":false},"scroll":{"x":"max-content","y":"600px","scrollToFirstRowOnChange":true},"style":{"contentStyle":{"borderColor":"#D9D9D9","enableContentStyle":true,"fontFamily":"arial, helvetica, \"microsoft yahei\";","lintHeight":40,"borderWidth":1,"evenLineBackColor":"#F8FAFC","textWeight":"400","fontSize":14,"oddLineBackColor":"#FFFFFF","textColor":"#262626"},"paginationStyle":{"layout":"bottomRight","size":"default"},"headerStyle":{"borderColor":"#D9D9D9","backgroundColor":"#3875FF","fontFamily":"arial, helvetica, \"microsoft yahei\";","lintHeight":40,"borderWidth":1,"textWeight":"600","fontSize":14,"enableTextStyle":true,"textColor":"#FFFFFF"}},"basic":{"rowSelection":false,"rowEdit":{"cancelText":"取消","editText":"编辑","saveText":"保存"},"title":"","showSequenceNumber":false,"rowKey":"id"}},
  columnList: [
    {
      id: 'enb8cg50z0',
      dataIndex: 'projectMilepost',
      headerComment: false,
      title: '项目阶段',
      ellipsis: false,
      headerOverflow: 'ellipsis',
      contentAlign: 'left',
      customHeaderCell: () => ({ style: { 'text-align': 'left' } }),
      rowEdit: false,
      rowEditConditions: [],
      contentType: 'TEXT',
      contentConfig: {"conditionStyle":[],"boolConfig":"collection"},
      // 使用插槽的列，设置单元格padding为0，padding样式在内容插槽中已加，以便内容插槽设置背景色时可以占满整个单元格；该样式会在计算属性生成列配置时加入customCell
      customCellStyle: { padding: 0 },
      width: '150px',
      resizable: true,
    },
    {
      id: 'snz846awg4',
      dataIndex: 'taskName',
      headerComment: false,
      title: '任务名称',
      ellipsis: false,
      headerOverflow: 'ellipsis',
      contentAlign: 'left',
      customHeaderCell: () => ({ style: { 'text-align': 'left' } }),
      rowEdit: false,
      rowEditConditions: [],
      contentType: 'TEXT',
      contentConfig: {"conditionStyle":[],"boolConfig":"collection"},
      // 使用插槽的列，设置单元格padding为0，padding样式在内容插槽中已加，以便内容插槽设置背景色时可以占满整个单元格；该样式会在计算属性生成列配置时加入customCell
      customCellStyle: { padding: 0 },
      width: '150px',
      resizable: true,
    },
    {
      id: '55pvh58ho6',
      dataIndex: 'taskOwner',
      headerComment: false,
      title: '任务负责人',
      ellipsis: false,
      headerOverflow: 'ellipsis',
      contentAlign: 'left',
      customHeaderCell: () => ({ style: { 'text-align': 'left' } }),
      rowEdit: false,
      rowEditConditions: [],
      contentType: 'TEXT',
      contentConfig: {"conditionStyle":[],"boolConfig":"collection"},
      // 使用插槽的列，设置单元格padding为0，padding样式在内容插槽中已加，以便内容插槽设置背景色时可以占满整个单元格；该样式会在计算属性生成列配置时加入customCell
      customCellStyle: { padding: 0 },
      width: '150px',
      resizable: true,
    },
    {
      id: 'jao7umddw4',
      dataIndex: 'taskParticipants',
      headerComment: false,
      title: '任务执行人',
      ellipsis: false,
      headerOverflow: 'ellipsis',
      contentAlign: 'left',
      customHeaderCell: () => ({ style: { 'text-align': 'left' } }),
      rowEdit: false,
      rowEditConditions: [],
      contentType: 'TEXT',
      contentConfig: {"conditionStyle":[],"boolConfig":"collection"},
      // 使用插槽的列，设置单元格padding为0，padding样式在内容插槽中已加，以便内容插槽设置背景色时可以占满整个单元格；该样式会在计算属性生成列配置时加入customCell
      customCellStyle: { padding: 0 },
      width: '200px',
      resizable: true,
    },
    {
      id: 'uwhkelo0ao',
      dataIndex: 'taskStatus',
      headerComment: false,
      title: '任务完成情况',
      ellipsis: false,
      headerOverflow: 'ellipsis',
      contentAlign: 'left',
      customHeaderCell: () => ({ style: { 'text-align': 'left' } }),
      rowEdit: false,
      rowEditConditions: [],
      contentType: 'TEXT',
      contentConfig: {"conditionStyle":[],"boolConfig":"collection"},
      // 使用插槽的列，设置单元格padding为0，padding样式在内容插槽中已加，以便内容插槽设置背景色时可以占满整个单元格；该样式会在计算属性生成列配置时加入customCell
      customCellStyle: { padding: 0 },
      width: '200px',
      resizable: true,
    },
    {
      id: 'okf8xf0lwa',
      dataIndex: 'taskFraction',
      headerComment: false,
      title: '任务分数',
      ellipsis: false,
      headerOverflow: 'ellipsis',
      contentAlign: 'left',
      customHeaderCell: () => ({ style: { 'text-align': 'left' } }),
      rowEdit: false,
      rowEditConditions: [],
      contentType: 'TEXT',
      contentConfig: {"conditionStyle":[],"boolConfig":"collection"},
      // 使用插槽的列，设置单元格padding为0，padding样式在内容插槽中已加，以便内容插槽设置背景色时可以占满整个单元格；该样式会在计算属性生成列配置时加入customCell
      customCellStyle: { padding: 0 },
      width: '120px',
      resizable: true,
    },
    {
      id: '33vrtdemba',
      dataIndex: 'taskHourInput',
      headerComment: false,
      title: '投入工时',
      ellipsis: false,
      headerOverflow: 'ellipsis',
      contentAlign: 'left',
      customHeaderCell: () => ({ style: { 'text-align': 'left' } }),
      rowEdit: false,
      rowEditConditions: [],
      contentType: 'TEXT',
      contentConfig: {"conditionStyle":[],"boolConfig":"collection"},
      // 使用插槽的列，设置单元格padding为0，padding样式在内容插槽中已加，以便内容插槽设置背景色时可以占满整个单元格；该样式会在计算属性生成列配置时加入customCell
      customCellStyle: { padding: 0 },
      width: '120px',
      resizable: true,
    },

  ],
  rawColumnList: [],
  // 进行行合并所需的排序规则，必须将其加到排序字段的前面，以实现合并单元格
  rowMergeSort: [],
  // 完整的排序规则：需要将行合并的排序规则和排序字段的排序规则赋给该属性；调接口时会使用其作为排序条件
  systemSort: [],
  // 条件格式需要的边界值映射：key为边界值id，value为边界值数据
  boundaryValueMap: {},
  // 表格单元格内容渲染需要的外部数据源：key为列，value为该列单元格的外部数据源配置
  contentDataSource: {},
})

const vid_gu03ej4an4_props = reactive({
  rt_showIcon: false,
})

const vid_tr943o4n9q_props = reactive({
  rt_text: undefined,
})

const vid_j3ml6r9mti_props = reactive({
  rt_text: undefined,
})

const vid_xdi69ruiqs_props = reactive({
  rt_text: undefined,
})

const vid_ewsrsr1qot_props = reactive({
  rt_text: undefined,
})

const vid_6mlgqj432n_props = reactive({
  rt_text: undefined,
})

const vid_c8eek4cuen_props = reactive({
  rt_text: undefined,
})

const vid_p3ax7uv9kv_props = reactive({
  rt_text: undefined,
})

const vid_las3v34fw3_props = reactive({
  caseValue: undefined,
})

const vid_oz6mjcov0p_props = reactive({
  systemSort: [],
  sorter: {},
  editRowSaveLoading: {},
  currentRow: {"projectName":"","projectScore":"","projectFractionRatio":"","monthGoals":"","acceptanceCriteria":"","taskFraction":"","goalsHour":"","id":"","employeeMonthlyGoalsFractionId":"","workHourScore":"","finalPerformanceScore":"","performanceScore":"","overallWorkHourRatio":""},
  selectedRowList: {"taskFraction":[],"custom":[],"projectScore":[],"goalsHour":[],"projectFractionRatio":[],"acceptanceCriteria":[],"custom3":[],"custom4":[],"monthGoals":[],"custom1":[],"custom2":[],"id":[],"projectName":[],"custom5":[],"employeeMonthlyGoalsFractionId":[],"workHourScore":[],"finalPerformanceScore":[],"performanceScore":[],"custom9":[],"overallWorkHourRatio":[]},
  totalNumber: "",
  rt_tableConfig: {"layout":{"showHeader":true,"sticky":false,"operationColumnFixed":"default"},"pagination":{"current":1,"pageSizeOptions":"10,20,30,40","enable":false,"showTotal":false,"hideOnSinglePage":false,"pageSize":10,"simple":false,"sync":true,"showQuickJumper":false,"showSizeChanger":false},"scroll":{"x":"max-content","y":"400px","scrollToFirstRowOnChange":true},"style":{"contentStyle":{"borderColor":"#D9D9D9","enableContentStyle":true,"fontFamily":"arial, helvetica, \"microsoft yahei\";","lintHeight":40,"borderWidth":1,"evenLineBackColor":"#F8FAFC","textWeight":"400","fontSize":14,"oddLineBackColor":"","textColor":"#262626"},"paginationStyle":{"layout":"bottomRight","size":"default"},"headerStyle":{"borderColor":"#D9D9D9","backgroundColor":"#3875FF","fontFamily":"arial, helvetica, \"microsoft yahei\";","lintHeight":40,"borderWidth":1,"textWeight":"600","fontSize":14,"enableTextStyle":true,"textColor":"#FFFFFF"}},"basic":{"rowSelection":false,"rowEdit":{"cancelText":"取消","editText":"编辑","saveText":"保存"},"title":"","showSequenceNumber":false,"rowKey":"id"}},
  columnList: [
    {
      id: 'ihizy1ql1x',
      dataIndex: 'finalPerformanceScore',
      headerComment: false,
      title: '最终绩效',
      ellipsis: false,
      headerOverflow: 'ellipsis',
      contentAlign: 'left',
      customHeaderCell: () => ({ style: { 'text-align': 'left' } }),
      rowEdit: false,
      rowEditConditions: [],
      contentType: 'TEXT',
      contentConfig: {"format":null,"defaultStyle":null,"conditionStyle":[],"dataSourceConfig":null,"boolConfig":"collection"},
      // 使用插槽的列，设置单元格padding为0，padding样式在内容插槽中已加，以便内容插槽设置背景色时可以占满整个单元格；该样式会在计算属性生成列配置时加入customCell
      customCellStyle: { padding: 0 },
      width: '100px',
      resizable: true,
    },
    {
      id: 'ancitopmee',
      dataIndex: 'overallWorkHourRatio',
      headerComment: false,
      title: '整体工时占比(已排除其他日报)',
      ellipsis: false,
      headerOverflow: 'ellipsis',
      contentAlign: 'left',
      customHeaderCell: () => ({ style: { 'text-align': 'left' } }),
      rowEdit: false,
      rowEditConditions: [],
      contentType: 'TEXT',
      contentConfig: {"format":null,"defaultStyle":null,"conditionStyle":[],"dataSourceConfig":null,"boolConfig":"collection"},
      // 使用插槽的列，设置单元格padding为0，padding样式在内容插槽中已加，以便内容插槽设置背景色时可以占满整个单元格；该样式会在计算属性生成列配置时加入customCell
      customCellStyle: { padding: 0 },
      width: '240px',
      resizable: true,
    },
    {
      id: '7myoq1q6jx',
      dataIndex: 'performanceScore',
      headerComment: false,
      title: '绩效分数',
      ellipsis: false,
      headerOverflow: 'ellipsis',
      contentAlign: 'left',
      customHeaderCell: () => ({ style: { 'text-align': 'left' } }),
      rowEdit: false,
      rowEditConditions: [],
      contentType: 'TEXT',
      contentConfig: {"format":null,"defaultStyle":null,"conditionStyle":[],"dataSourceConfig":null,"boolConfig":"collection"},
      // 使用插槽的列，设置单元格padding为0，padding样式在内容插槽中已加，以便内容插槽设置背景色时可以占满整个单元格；该样式会在计算属性生成列配置时加入customCell
      customCellStyle: { padding: 0 },
      width: '100px',
      resizable: true,
    },
    {
      id: 'gksbezfsgv',
      dataIndex: 'projectName',
      headerComment: false,
      title: '项目名称',
      ellipsis: false,
      headerOverflow: 'ellipsis',
      contentAlign: 'left',
      customHeaderCell: () => ({ style: { 'text-align': 'left' } }),
      rowEdit: false,
      rowEditConditions: [],
      contentType: 'TEXT',
      contentConfig: {"conditionStyle":[],"boolConfig":"collection"},
      // 使用插槽的列，设置单元格padding为0，padding样式在内容插槽中已加，以便内容插槽设置背景色时可以占满整个单元格；该样式会在计算属性生成列配置时加入customCell
      customCellStyle: { padding: 0 },
      width: '200px',
      resizable: true,
    },
    {
      id: 'fp4o4dkei7',
      dataIndex: 'projectScore',
      headerComment: false,
      title: '项目分数',
      ellipsis: false,
      headerOverflow: 'ellipsis',
      contentAlign: 'left',
      customHeaderCell: () => ({ style: { 'text-align': 'left' } }),
      rowEdit: false,
      rowEditConditions: [],
      contentType: 'TEXT',
      contentConfig: {"conditionStyle":[],"boolConfig":"collection"},
      // 使用插槽的列，设置单元格padding为0，padding样式在内容插槽中已加，以便内容插槽设置背景色时可以占满整个单元格；该样式会在计算属性生成列配置时加入customCell
      customCellStyle: { padding: 0 },
      width: '100px',
      resizable: true,
    },
    {
      id: '5cj31tkmlp',
      dataIndex: 'workHourScore',
      headerComment: false,
      title: '工时分数',
      ellipsis: false,
      headerOverflow: 'ellipsis',
      contentAlign: 'left',
      customHeaderCell: () => ({ style: { 'text-align': 'left' } }),
      rowEdit: false,
      rowEditConditions: [],
      contentType: 'TEXT',
      contentConfig: {"conditionStyle":[],"boolConfig":"collection"},
      // 使用插槽的列，设置单元格padding为0，padding样式在内容插槽中已加，以便内容插槽设置背景色时可以占满整个单元格；该样式会在计算属性生成列配置时加入customCell
      customCellStyle: { padding: 0 },
      width: '100px',
      resizable: true,
    },
    {
      id: 'xwt9mado5p',
      dataIndex: 'projectFractionRatio',
      headerComment: false,
      title: '通用项目工时占比(已排除其他日报）',
      ellipsis: false,
      headerOverflow: 'ellipsis',
      contentAlign: 'left',
      customHeaderCell: () => ({ style: { 'text-align': 'left' } }),
      rowEdit: false,
      rowEditConditions: [],
      contentType: 'TEXT',
      contentConfig: {"conditionStyle":[],"boolConfig":"collection"},
      // 使用插槽的列，设置单元格padding为0，padding样式在内容插槽中已加，以便内容插槽设置背景色时可以占满整个单元格；该样式会在计算属性生成列配置时加入customCell
      customCellStyle: { padding: 0 },
      width: '300px',
      resizable: true,
    },
    {
      id: 'w4b3u5926b',
      dataIndex: 'monthGoals',
      headerComment: false,
      title: '月度目标',
      ellipsis: false,
      headerOverflow: 'ellipsis',
      contentAlign: 'left',
      customHeaderCell: () => ({ style: { 'text-align': 'left' } }),
      rowEdit: false,
      rowEditConditions: [],
      contentType: 'TEXT',
      contentConfig: {"conditionStyle":[],"boolConfig":"collection"},
      // 使用插槽的列，设置单元格padding为0，padding样式在内容插槽中已加，以便内容插槽设置背景色时可以占满整个单元格；该样式会在计算属性生成列配置时加入customCell
      customCellStyle: { padding: 0 },
      width: '300px',
      resizable: true,
    },
    {
      id: '4xixxn21ds',
      dataIndex: 'acceptanceCriteria',
      headerComment: false,
      title: '验收标准',
      ellipsis: false,
      headerOverflow: 'ellipsis',
      contentAlign: 'left',
      customHeaderCell: () => ({ style: { 'text-align': 'left' } }),
      rowEdit: false,
      rowEditConditions: [],
      contentType: 'TEXT',
      contentConfig: {"conditionStyle":[],"boolConfig":"collection"},
      // 使用插槽的列，设置单元格padding为0，padding样式在内容插槽中已加，以便内容插槽设置背景色时可以占满整个单元格；该样式会在计算属性生成列配置时加入customCell
      customCellStyle: { padding: 0 },
      width: '300px',
      resizable: true,
    },
    {
      id: 'wcjgjsikai',
      dataIndex: 'goalsHour',
      headerComment: false,
      title: '目标投入工时',
      ellipsis: false,
      headerOverflow: 'ellipsis',
      contentAlign: 'left',
      customHeaderCell: () => ({ style: { 'text-align': 'left' } }),
      rowEdit: false,
      rowEditConditions: [],
      contentType: 'TEXT',
      contentConfig: {"conditionStyle":[],"boolConfig":"collection"},
      // 使用插槽的列，设置单元格padding为0，padding样式在内容插槽中已加，以便内容插槽设置背景色时可以占满整个单元格；该样式会在计算属性生成列配置时加入customCell
      customCellStyle: { padding: 0 },
      width: '150px',
      resizable: true,
    },
    {
      dataIndex: 'vid_oz6mjcov0p_operation',
      title: '操作',
    },
  ],
  rawColumnList: [],
  // 进行行合并所需的排序规则，必须将其加到排序字段的前面，以实现合并单元格
  rowMergeSort: [
    { order: 'projectName', direction: 'ASC' },
    { order: 'projectScore', direction: 'ASC' },
    { order: 'projectFractionRatio', direction: 'ASC' },
    { order: 'workHourScore', direction: 'ASC' },
    { order: 'finalPerformanceScore', direction: 'ASC' },
    { order: 'performanceScore', direction: 'ASC' },
    { order: 'overallWorkHourRatio', direction: 'ASC' },
  ],
  // 完整的排序规则：需要将行合并的排序规则和排序字段的排序规则赋给该属性；调接口时会使用其作为排序条件
  systemSort: [
    { order: 'projectName', direction: 'ASC' },
    { order: 'projectScore', direction: 'ASC' },
    { order: 'projectFractionRatio', direction: 'ASC' },
    { order: 'workHourScore', direction: 'ASC' },
    { order: 'finalPerformanceScore', direction: 'ASC' },
    { order: 'performanceScore', direction: 'ASC' },
    { order: 'overallWorkHourRatio', direction: 'ASC' },
  ],
  // 条件格式需要的边界值映射：key为边界值id，value为边界值数据
  boundaryValueMap: {},
  // 表格单元格内容渲染需要的外部数据源：key为列，value为该列单元格的外部数据源配置
  contentDataSource: {},
})

const vid_oll1hypc0q_props = reactive({
  caseValue: undefined,
})

const vid_5r571w6dkh_props = reactive({
  systemSort: [],
  sorter: {},
  editRowSaveLoading: {},
  currentRow: {"projectScore":"","workHoursPercentageOfSystemAccountingStr":"","monthGoals":"","acceptanceCriteria":"","taskFraction":"","goalsHour":"","id":"","employeeMonthlyGoalsFractionId":"","workHourScore":"","templateProjectFinalPerformance":"","performanceScore":"","projectName":"","scoreChange":""},
  selectedRowList: {"taskFraction":[],"custom":[],"projectScore":[],"goalsHour":[],"projectFractionRatio":[],"acceptanceCriteria":[],"custom3":[],"custom4":[],"monthGoals":[],"custom1":[],"custom2":[],"id":[],"projectName":[],"custom5":[],"employeeMonthlyGoalsFractionId":[],"workHourScore":[],"workHoursPercentageOfSystemAccounting":[],"templateProjectFinalPerformance":[],"performanceScore":[],"scoreChange":[],"workHoursPercentageOfSystemAccountingStr":[]},
  totalNumber: "",
  rt_tableConfig: {"layout":{"showHeader":true,"sticky":false,"operationColumnFixed":"default"},"pagination":{"current":1,"pageSizeOptions":"10,20,30,40","enable":false,"showTotal":false,"hideOnSinglePage":false,"pageSize":10,"simple":false,"sync":true,"showQuickJumper":false,"showSizeChanger":false},"scroll":{"x":"max-content","y":"400px","scrollToFirstRowOnChange":true},"style":{"contentStyle":{"borderColor":"#D9D9D9","enableContentStyle":true,"fontFamily":"arial, helvetica, \"microsoft yahei\";","lintHeight":40,"borderWidth":1,"evenLineBackColor":"#F8FAFC","textWeight":"400","fontSize":14,"oddLineBackColor":"","textColor":"#262626"},"paginationStyle":{"layout":"bottomRight","size":"default"},"headerStyle":{"borderColor":"#D9D9D9","backgroundColor":"#3875FF","fontFamily":"arial, helvetica, \"microsoft yahei\";","lintHeight":40,"borderWidth":1,"textWeight":"600","fontSize":14,"enableTextStyle":true,"textColor":"#FFFFFF"}},"basic":{"rowSelection":false,"rowEdit":{"cancelText":"取消","editText":"编辑","saveText":"保存"},"title":"","showSequenceNumber":false,"rowKey":"id"}},
  columnList: [
    {
      id: 'ihizy1ql1x',
      dataIndex: 'templateProjectFinalPerformance',
      headerComment: false,
      title: '最终绩效',
      ellipsis: false,
      headerOverflow: 'ellipsis',
      contentAlign: 'left',
      customHeaderCell: () => ({ style: { 'text-align': 'left' } }),
      rowEdit: false,
      rowEditConditions: [],
      contentType: 'TEXT',
      contentConfig: {"format":null,"defaultStyle":null,"conditionStyle":[],"dataSourceConfig":null,"boolConfig":"collection"},
      // 使用插槽的列，设置单元格padding为0，padding样式在内容插槽中已加，以便内容插槽设置背景色时可以占满整个单元格；该样式会在计算属性生成列配置时加入customCell
      customCellStyle: { padding: 0 },
      resizable: true,
    },
    {
      id: '7myoq1q6jx',
      dataIndex: 'performanceScore',
      headerComment: false,
      title: '绩效分数',
      ellipsis: false,
      headerOverflow: 'ellipsis',
      contentAlign: 'left',
      customHeaderCell: () => ({ style: { 'text-align': 'left' } }),
      rowEdit: false,
      rowEditConditions: [],
      contentType: 'TEXT',
      contentConfig: {"format":null,"defaultStyle":null,"conditionStyle":[],"dataSourceConfig":null,"boolConfig":"collection"},
      // 使用插槽的列，设置单元格padding为0，padding样式在内容插槽中已加，以便内容插槽设置背景色时可以占满整个单元格；该样式会在计算属性生成列配置时加入customCell
      customCellStyle: { padding: 0 },
      resizable: true,
    },
    {
      id: 'xwt9mado5p',
      dataIndex: 'workHoursPercentageOfSystemAccountingStr',
      headerComment: false,
      title: '整体工时占比(已排除其他日报)',
      ellipsis: false,
      headerOverflow: 'ellipsis',
      contentAlign: 'left',
      customHeaderCell: () => ({ style: { 'text-align': 'left' } }),
      rowEdit: false,
      rowEditConditions: [],
      contentType: 'TEXT',
      contentConfig: {"conditionStyle":[],"boolConfig":"collection"},
      // 使用插槽的列，设置单元格padding为0，padding样式在内容插槽中已加，以便内容插槽设置背景色时可以占满整个单元格；该样式会在计算属性生成列配置时加入customCell
      customCellStyle: { padding: 0 },
      width: '260px',
      resizable: true,
    },
    {
      id: 'hklvgqagss',
      dataIndex: 'projectName',
      headerComment: false,
      title: '参与项目',
      ellipsis: false,
      headerOverflow: 'ellipsis',
      contentAlign: 'left',
      customHeaderCell: () => ({ style: { 'text-align': 'left' } }),
      rowEdit: false,
      rowEditConditions: [],
      contentType: 'TEXT',
      contentConfig: {"format":null,"defaultStyle":null,"conditionStyle":[],"dataSourceConfig":null,"boolConfig":"collection"},
      // 使用插槽的列，设置单元格padding为0，padding样式在内容插槽中已加，以便内容插槽设置背景色时可以占满整个单元格；该样式会在计算属性生成列配置时加入customCell
      customCellStyle: { padding: 0 },
      resizable: true,
    },
    {
      id: 'nzjk8x1j3y',
      dataIndex: 'scoreChange',
      headerComment: false,
      title: '加减分',
      ellipsis: false,
      headerOverflow: 'ellipsis',
      contentAlign: 'left',
      customHeaderCell: () => ({ style: { 'text-align': 'left' } }),
      rowEdit: false,
      rowEditConditions: [],
      contentType: 'TEXT',
      contentConfig: {"format":null,"defaultStyle":null,"conditionStyle":[],"dataSourceConfig":null,"boolConfig":"collection"},
      // 使用插槽的列，设置单元格padding为0，padding样式在内容插槽中已加，以便内容插槽设置背景色时可以占满整个单元格；该样式会在计算属性生成列配置时加入customCell
      customCellStyle: { padding: 0 },
      resizable: true,
    },
    {
      dataIndex: 'vid_5r571w6dkh_operation',
      title: '操作',
    },
  ],
  rawColumnList: [],
  // 进行行合并所需的排序规则，必须将其加到排序字段的前面，以实现合并单元格
  rowMergeSort: [
    { order: 'projectScore', direction: 'ASC' },
    { order: 'workHoursPercentageOfSystemAccountingStr', direction: 'ASC' },
    { order: 'workHourScore', direction: 'ASC' },
    { order: 'templateProjectFinalPerformance', direction: 'ASC' },
    { order: 'performanceScore', direction: 'ASC' },
  ],
  // 完整的排序规则：需要将行合并的排序规则和排序字段的排序规则赋给该属性；调接口时会使用其作为排序条件
  systemSort: [
    { order: 'projectScore', direction: 'ASC' },
    { order: 'workHoursPercentageOfSystemAccountingStr', direction: 'ASC' },
    { order: 'workHourScore', direction: 'ASC' },
    { order: 'templateProjectFinalPerformance', direction: 'ASC' },
    { order: 'performanceScore', direction: 'ASC' },
  ],
  // 条件格式需要的边界值映射：key为边界值id，value为边界值数据
  boundaryValueMap: {},
  // 表格单元格内容渲染需要的外部数据源：key为列，value为该列单元格的外部数据源配置
  contentDataSource: {},
})

const vid_4dg9v453pk_props = reactive({
  caseValue: undefined,
})

const vid_j2ezknemwx_props = reactive({
  systemSort: [],
  sorter: {},
  editRowSaveLoading: {},
  currentRow: {"finalScore":"","dailyDate":"","triggerTime":"","score":"","reason":""},
  selectedRowList: {"taskFraction":[],"custom":[],"projectScore":[],"goalsHour":[],"projectFractionRatio":[],"acceptanceCriteria":[],"custom3":[],"custom4":[],"monthGoals":[],"custom1":[],"custom2":[],"id":[],"projectName":[],"custom5":[],"employeeMonthlyGoalsFractionId":[],"workHourScore":[],"workHoursPercentageOfSystemAccounting":[],"templateProjectFinalPerformance":[],"performanceScore":[],"scoreChange":[],"workHoursPercentageOfSystemAccountingStr":[],"finalScore":[],"dailyDate":[],"triggerTime":[],"score":[],"reason":[]},
  totalNumber: "",
  rt_tableConfig: {"layout":{"showHeader":true,"sticky":false,"operationColumnFixed":"default"},"pagination":{"current":1,"pageSizeOptions":"10,20,30,40","enable":false,"showTotal":false,"hideOnSinglePage":false,"pageSize":10,"simple":false,"sync":true,"showQuickJumper":false,"showSizeChanger":false},"scroll":{"x":"max-content","y":"400px","scrollToFirstRowOnChange":true},"style":{"contentStyle":{"borderColor":"#D9D9D9","enableContentStyle":true,"fontFamily":"arial, helvetica, \"microsoft yahei\";","lintHeight":40,"borderWidth":1,"evenLineBackColor":"#F8FAFC","textWeight":"400","fontSize":14,"oddLineBackColor":"","textColor":"#262626"},"paginationStyle":{"layout":"bottomRight","size":"default"},"headerStyle":{"borderColor":"#D9D9D9","backgroundColor":"#3875FF","fontFamily":"arial, helvetica, \"microsoft yahei\";","lintHeight":40,"borderWidth":1,"textWeight":"600","fontSize":14,"enableTextStyle":true,"textColor":"#FFFFFF"}},"basic":{"rowSelection":false,"rowEdit":{"cancelText":"取消","editText":"编辑","saveText":"保存"},"title":"","showSequenceNumber":false,"rowKey":"id"}},
  columnList: [
    {
      id: 'ygtltx03y4',
      dataIndex: 'finalScore',
      headerComment: false,
      title: '最终分数',
      ellipsis: false,
      headerOverflow: 'ellipsis',
      contentAlign: 'left',
      customHeaderCell: () => ({ style: { 'text-align': 'left' } }),
      rowEdit: false,
      rowEditConditions: [],
      contentType: 'TEXT',
      contentConfig: {"format":null,"defaultStyle":null,"conditionStyle":[],"dataSourceConfig":null,"boolConfig":"collection"},
      // 使用插槽的列，设置单元格padding为0，padding样式在内容插槽中已加，以便内容插槽设置背景色时可以占满整个单元格；该样式会在计算属性生成列配置时加入customCell
      customCellStyle: { padding: 0 },
      resizable: true,
    },
    {
      id: '8nxyakxmql',
      dataIndex: 'dailyDate',
      headerComment: false,
      title: '工时对应时间',
      ellipsis: false,
      headerOverflow: 'ellipsis',
      contentAlign: 'left',
      customHeaderCell: () => ({ style: { 'text-align': 'left' } }),
      rowEdit: false,
      rowEditConditions: [],
      contentType: 'TEXT',
      contentConfig: {"format":null,"defaultStyle":null,"conditionStyle":[],"dataSourceConfig":null,"boolConfig":"collection"},
      // 使用插槽的列，设置单元格padding为0，padding样式在内容插槽中已加，以便内容插槽设置背景色时可以占满整个单元格；该样式会在计算属性生成列配置时加入customCell
      customCellStyle: { padding: 0 },
      resizable: true,
    },
    {
      id: 'wtrds0z4ep',
      dataIndex: 'triggerTime',
      headerComment: false,
      title: '触发时间',
      ellipsis: false,
      headerOverflow: 'ellipsis',
      contentAlign: 'left',
      customHeaderCell: () => ({ style: { 'text-align': 'left' } }),
      rowEdit: false,
      rowEditConditions: [],
      contentType: 'TEXT',
      contentConfig: {"format":null,"defaultStyle":null,"conditionStyle":[],"dataSourceConfig":null,"boolConfig":"collection"},
      // 使用插槽的列，设置单元格padding为0，padding样式在内容插槽中已加，以便内容插槽设置背景色时可以占满整个单元格；该样式会在计算属性生成列配置时加入customCell
      customCellStyle: { padding: 0 },
      resizable: true,
    },
    {
      id: 'icwdvuj1x8',
      dataIndex: 'score',
      headerComment: false,
      title: '触发分数',
      ellipsis: false,
      headerOverflow: 'ellipsis',
      contentAlign: 'left',
      customHeaderCell: () => ({ style: { 'text-align': 'left' } }),
      rowEdit: false,
      rowEditConditions: [],
      contentType: 'TEXT',
      contentConfig: {"format":null,"defaultStyle":null,"conditionStyle":[],"dataSourceConfig":null,"boolConfig":"collection"},
      // 使用插槽的列，设置单元格padding为0，padding样式在内容插槽中已加，以便内容插槽设置背景色时可以占满整个单元格；该样式会在计算属性生成列配置时加入customCell
      customCellStyle: { padding: 0 },
      resizable: true,
    },
    {
      id: 'a1ejwdh6cf',
      dataIndex: 'reason',
      headerComment: false,
      title: '原因',
      ellipsis: false,
      headerOverflow: 'ellipsis',
      contentAlign: 'left',
      customHeaderCell: () => ({ style: { 'text-align': 'left' } }),
      rowEdit: false,
      rowEditConditions: [],
      contentType: 'TEXT',
      contentConfig: {"format":null,"defaultStyle":null,"conditionStyle":[],"dataSourceConfig":null,"boolConfig":"collection"},
      // 使用插槽的列，设置单元格padding为0，padding样式在内容插槽中已加，以便内容插槽设置背景色时可以占满整个单元格；该样式会在计算属性生成列配置时加入customCell
      customCellStyle: { padding: 0 },
      width: '500px',
      resizable: true,
    },

  ],
  rawColumnList: [],
  // 进行行合并所需的排序规则，必须将其加到排序字段的前面，以实现合并单元格
  rowMergeSort: [
    { order: 'finalScore', direction: 'ASC' },
  ],
  // 完整的排序规则：需要将行合并的排序规则和排序字段的排序规则赋给该属性；调接口时会使用其作为排序条件
  systemSort: [
    { order: 'finalScore', direction: 'ASC' },
  ],
  // 条件格式需要的边界值映射：key为边界值id，value为边界值数据
  boundaryValueMap: {},
  // 表格单元格内容渲染需要的外部数据源：key为列，value为该列单元格的外部数据源配置
  contentDataSource: {},
})



// 处理校验
const setSubFormName =(parentInfo, name)=>{
  return [parentInfo.parents, parentInfo.cycleIndex, name];
}


const vid_ba39vq33n9_options_raw = ref([])

const vid_ba39vq33n9_options = computed(() => {
  return () => vid_ba39vq33n9_options_raw.value
})



const vid_oz6mjcov0p_options_raw = ref([])

const vid_oz6mjcov0p_options = computed(() => {
  return () => vid_oz6mjcov0p_options_raw.value
})



const vid_5r571w6dkh_options_raw = ref([])

const vid_5r571w6dkh_options = computed(() => {
  return () => vid_5r571w6dkh_options_raw.value
})



const vid_j2ezknemwx_options_raw = ref([])

const vid_j2ezknemwx_options = computed(() => {
  return () => vid_j2ezknemwx_options_raw.value
})

// 图表组件 表格_fu90fusa9m 条件格式数据依赖
const vid_ba39vq33n9_chartConditionDependencyMap = ref({
})
// 图表组件 表格_s04uod385g 条件格式数据依赖
const vid_oz6mjcov0p_chartConditionDependencyMap = ref({
})
// 图表组件 表格_o5x6dlw2yn 条件格式数据依赖
const vid_5r571w6dkh_chartConditionDependencyMap = ref({
})
// 图表组件 表格_41t57oc4jl 条件格式数据依赖
const vid_j2ezknemwx_chartConditionDependencyMap = ref({
})
/* ========================== 属性定义 ========================== */


/* -------------------------- 元素数据引用 -------------------------- */


/* ========================== 元素数据引用 ========================== */


/* -------------------------- 页面数据 -------------------------- */

// 页面数据 绩效目标关联任务列表
const dataConnector_conn_xh8v56w34n_response = ref();
const dataConnector_conn_xh8v56w34n = async (additionParams = {}) => {
  const exec = async () => {

    // 获取参数
    const params = {

    };

    // 注入附加的参数
    try {
      merge(params, additionParams);
    } catch (error) {
      console.log(error)
    }
    // 判断加载提示

    // 处理URL
    let url = '/solution-ppm/api/v2/built-in-system-ppm/emgf/{employeeMonthlyGoalsId}/task_list';
    // 替换url中的变量
    url = url.replace('{employeeMonthlyGoalsId}', String(vid_oz6mjcov0p_props?.currentRow.id))
    // 排除空参数  日期组件重置后的空参数是[null] 或者[undefined]
    Object.keys(params).forEach(key=>{ if(params[key] === null){ delete params[key] }else if( Object.prototype.toString.call(params[key]) === '[object Object]' ){ Object.keys(params[key]).forEach(childKey=>{ if(params[key][childKey] === null || (Array.isArray(params[key][childKey]) && params[key][childKey].length === 1 && isNullOrUnDef(params[key][childKey]?.[0]))){ delete params[key][childKey] }}) } });
    return post(url, params).then(async (resp) => {
      dataConnector_conn_xh8v56w34n_response.value = resp;

      return resp;
    }).catch(async (e) => {


      return Promise.reject(e);
    }).finally(async () => {


    })
  }

  return await exec()

}


// 页面数据 单个人员绩效
const dataConnector_conn_4fgjnw4u2k_response = ref();
const dataConnector_conn_4fgjnw4u2k = async (additionParams = {}) => {
  const exec = async () => {

    // 获取参数
    const params = {

    };

    // 注入附加的参数
    try {
      merge(params, additionParams);
    } catch (error) {
      console.log(error)
    }
    // 判断加载提示

    // 处理URL
    let url = '/solution-ppm/api/v2/built-in-system-ppm/emgf/{employeeMonthlyGoalsFractionId}';
    // 替换url中的变量
    url = url.replace('{employeeMonthlyGoalsFractionId}', String(pageParameter_state.employeeMonthlyGoalsFractionId))
    // 排除空参数  日期组件重置后的空参数是[null] 或者[undefined]
    Object.keys(params).forEach(key=>{ if(params[key] === null){ delete params[key] }else if( Object.prototype.toString.call(params[key]) === '[object Object]' ){ Object.keys(params[key]).forEach(childKey=>{ if(params[key][childKey] === null || (Array.isArray(params[key][childKey]) && params[key][childKey].length === 1 && isNullOrUnDef(params[key][childKey]?.[0]))){ delete params[key][childKey] }}) } });
    return get(url, params).then(async (resp) => {
      dataConnector_conn_4fgjnw4u2k_response.value = resp;

      return resp;
    }).catch(async (e) => {


      return Promise.reject(e);
    }).finally(async () => {


    })
  }

  return await exec()

}


// 页面数据 绩效目标列表
const dataConnector_conn_d2k3gluhvn_response = ref();
const dataConnector_conn_d2k3gluhvn = async (additionParams = {}) => {
  const exec = async () => {

    // 获取参数
    const params = {

    };

    // 注入附加的参数
    try {
      merge(params, additionParams);
    } catch (error) {
      console.log(error)
    }
    // 判断加载提示

    // 处理URL
    let url = '/solution-ppm/api/v2/built-in-system-ppm/emgf/{employeeMonthlyGoalsFractionId}/goals_list';
    // 替换url中的变量
    url = url.replace('{employeeMonthlyGoalsFractionId}', String(pageParameter_state.employeeMonthlyGoalsFractionId))
    // 排除空参数  日期组件重置后的空参数是[null] 或者[undefined]
    Object.keys(params).forEach(key=>{ if(params[key] === null){ delete params[key] }else if( Object.prototype.toString.call(params[key]) === '[object Object]' ){ Object.keys(params[key]).forEach(childKey=>{ if(params[key][childKey] === null || (Array.isArray(params[key][childKey]) && params[key][childKey].length === 1 && isNullOrUnDef(params[key][childKey]?.[0]))){ delete params[key][childKey] }}) } });
    return post(url, params).then(async (resp) => {
      dataConnector_conn_d2k3gluhvn_response.value = resp;

      return resp;
    }).catch(async (e) => {


      return Promise.reject(e);
    }).finally(async () => {


    })
  }

  return await exec()

}


// 页面数据 模板绩效目标列表
const dataConnector_conn_lg7vaioqev_response = ref();
const dataConnector_conn_lg7vaioqev = async (additionParams = {}) => {
  const exec = async () => {

    // 获取参数
    const params = {

    };

    // 注入附加的参数
    try {
      merge(params, additionParams);
    } catch (error) {
      console.log(error)
    }
    // 判断加载提示

    // 处理URL
    let url = '/solution-ppm/api/v2/built-in-system-ppm/emgf/{employeeMonthlyGoalsFractionId}/template_goals_list';
    // 替换url中的变量
    url = url.replace('{employeeMonthlyGoalsFractionId}', String(pageParameter_state.employeeMonthlyGoalsFractionId))
    // 排除空参数  日期组件重置后的空参数是[null] 或者[undefined]
    Object.keys(params).forEach(key=>{ if(params[key] === null){ delete params[key] }else if( Object.prototype.toString.call(params[key]) === '[object Object]' ){ Object.keys(params[key]).forEach(childKey=>{ if(params[key][childKey] === null || (Array.isArray(params[key][childKey]) && params[key][childKey].length === 1 && isNullOrUnDef(params[key][childKey]?.[0]))){ delete params[key][childKey] }}) } });
    return get(url, params).then(async (resp) => {
      dataConnector_conn_lg7vaioqev_response.value = resp;

      return resp;
    }).catch(async (e) => {


      return Promise.reject(e);
    }).finally(async () => {


    })
  }

  return await exec()

}


// 页面数据 日报绩效列表
const dataConnector_conn_f2xebtdzuv_response = ref();
const dataConnector_conn_f2xebtdzuv = async (additionParams = {}) => {
  const exec = async () => {

    // 获取参数
    const params = {

    };

    // 注入附加的参数
    try {
      merge(params, additionParams);
    } catch (error) {
      console.log(error)
    }
    // 判断加载提示

    // 处理URL
    let url = '/solution-ppm/api/v2/built-in-system-ppm/emgf/{employeeMonthlyGoalsFractionId}/daily_list';
    // 替换url中的变量
    url = url.replace('{employeeMonthlyGoalsFractionId}', String(pageParameter_state.employeeMonthlyGoalsFractionId))
    // 排除空参数  日期组件重置后的空参数是[null] 或者[undefined]
    Object.keys(params).forEach(key=>{ if(params[key] === null){ delete params[key] }else if( Object.prototype.toString.call(params[key]) === '[object Object]' ){ Object.keys(params[key]).forEach(childKey=>{ if(params[key][childKey] === null || (Array.isArray(params[key][childKey]) && params[key][childKey].length === 1 && isNullOrUnDef(params[key][childKey]?.[0]))){ delete params[key][childKey] }}) } });
    return get(url, params).then(async (resp) => {
      dataConnector_conn_f2xebtdzuv_response.value = resp;

      return resp;
    }).catch(async (e) => {


      return Promise.reject(e);
    }).finally(async () => {


    })
  }

  return await exec()

}

/* ========================== 页面数据 ========================== */


/* -------------------------- 响应 -------------------------- */

// 页面交互 我的绩效
const response_640eobxscz = async () => {

  const query = {

  };
  let appBaseUrl = '';
  /*** PUBLISH_EXEGESIS ***
   appBaseUrl = getAppBaseUrl()
   *** PUBLISH_EXEGESIS ***/
  const jumpInfo = {
    path: `${appBaseUrl}/app_50000005/page/50001616`, // 跳转地址
    query
  };
  const routeUrl = router.resolve(jumpInfo);
  let url = routeUrl.href;
  // 判断是否是MicroApp的子应用
  const microAppData = window.__MICRO_APP_ENVIRONMENT__ || window.eventCenterForViteApp?.getData();
  if (microAppData) {
    const urlList = []
    Object.keys(jumpInfo.query).forEach(item=>{
      urlList.push(item + '=' + jumpInfo.query[item]);
    })
    // 判断要跳转的地址是否是用户自定义输入的
    const customJumpPath = jumpInfo.path;

    // 自定义跳转页面不是其他平台的菜单，则直接使用全路径
    if (customJumpPath.indexOf('/allin-app/') !== -1) {
      // 目标页面是其他平台的菜单
      const realPath = customJumpPath.split('/allin-app/').pop()
      // 兼容二级域名情况
      let jumpPath = (microAppData.baseroute ?? '/allin-app') + '/' + realPath
      // 配置有参数，需要加参数添加到路由后面
      if(urlList.length) {
        // 跳转的路径本身带有参数
        if(jumpPath.indexOf('?') !== -1) {
          jumpPath += '&' + urlList.join("&");
        } else {
          jumpPath += '?'+ urlList.join("&");
        }
      }
      url = location.origin + jumpPath;
    } else {
      // 目标页面就是低代码项目本身的页面
      if(location.href.indexOf('/allin-app/') > -1) {
        url = location.origin + location.pathname.split("/allin-app/").shift() + '/allin-app'+ url;
      } else {
        url = location.origin + '/allin-app'+ url;
      }
    }
  }
  // 打开新窗口

  if (microAppData) {
    window.location.href = url;
  } else {
    router.push(jumpInfo);
  }


}

/* ========================== 响应 ========================== */


/* -------------------------- 函数 -------------------------- */

// 自定义函数 获取绩效详情
const customFunction_jrb3p6eqqk =  (...params) => {
  get(`/solution-ppm/api/v2/built-in-system-ppm/pmgf/employeeMonthlyPerformance/getScoreDetail/${state.employeeMonthlyGoalsFractionId}`).then(({data})=>{
    state.detailVisible = true
    console.log(data,'dads')
    state.firstPart = data.firstPart
    state.secondPart = data.secondPart
    state.thirdPart = data.thirdPart
    state.fourthPart = data.fourthPart
  })
}


// 自定义函数 项目中任务完成详情
const customFunction_wenbt73z35 =  (...params) => {
  showJX(vid_5r571w6dkh_props.currentRow)
}

/* ========================== 函数 ========================== */


/* -------------------------- 页面参数 -------------------------- */

const pageParameter_state = reactive({
  'processInstanceId': props.processInstanceId ?? route.query.processInstanceId,
  'employeeMonthlyGoalsFractionId': undefined,
})

/* ========================== 页面参数 ========================== */


/* -------------------------- 组件事件处理方法 -------------------------- */

// ---------------------------- 组件数据同步 ----------------------------
// 处理 表格_fu90fusa9m 的 systemList 属性关联
watch(() => dataConnector_conn_xh8v56w34n_response?.value?.data,
  () => { vid_ba39vq33n9_options_raw.value = dataConnector_conn_xh8v56w34n_response?.value?.data; },
  {deep: true})
// 处理 简单文本_5t9xeyxh9b 的 rt_text 属性关联
watch(() => dataConnector_conn_4fgjnw4u2k_response?.value?.data?.goalsReportHourInput,
  () => { vid_tr943o4n9q_props.rt_text = dataConnector_conn_4fgjnw4u2k_response?.value?.data?.goalsReportHourInput; },
  {deep: true})
// 处理 4 的 rt_text 属性关联
watch(() => dataConnector_conn_4fgjnw4u2k_response?.value?.data?.taskNum,
  () => { vid_j3ml6r9mti_props.rt_text = dataConnector_conn_4fgjnw4u2k_response?.value?.data?.taskNum; },
  {deep: true})
// 处理 4 的 rt_text 属性关联
watch(() => dataConnector_conn_4fgjnw4u2k_response?.value?.data?.goalsNum,
  () => { vid_xdi69ruiqs_props.rt_text = dataConnector_conn_4fgjnw4u2k_response?.value?.data?.goalsNum; },
  {deep: true})
// 处理 4 的 rt_text 属性关联
watch(() => dataConnector_conn_4fgjnw4u2k_response?.value?.data?.projectNum,
  () => { vid_ewsrsr1qot_props.rt_text = dataConnector_conn_4fgjnw4u2k_response?.value?.data?.projectNum; },
  {deep: true})
// 处理 简单文本_s21p1cjamn 的 rt_text 属性关联
watch(() => dataConnector_conn_4fgjnw4u2k_response?.value?.data?.fraction,
  () => { vid_6mlgqj432n_props.rt_text = dataConnector_conn_4fgjnw4u2k_response?.value?.data?.fraction; },
  {deep: true})
// 处理 简单文本_wtvcea7ysd 的 rt_text 属性关联
watch(() => dataConnector_conn_4fgjnw4u2k_response?.value?.data?.userName,
  () => { vid_c8eek4cuen_props.rt_text = dataConnector_conn_4fgjnw4u2k_response?.value?.data?.userName; },
  {deep: true})
// 处理 24 的 rt_text 属性关联
watch(() => dataConnector_conn_4fgjnw4u2k_response?.value?.data?.normalDailyReportHourInput,
  () => { vid_p3ax7uv9kv_props.rt_text = dataConnector_conn_4fgjnw4u2k_response?.value?.data?.normalDailyReportHourInput; },
  {deep: true})
// 处理 case_0tyjy1l51s 的 caseValue 属性关联
watch(() => dataConnector_conn_d2k3gluhvn_response?.value?.data?.totalElements,
  () => { vid_las3v34fw3_props.caseValue = dataConnector_conn_d2k3gluhvn_response?.value?.data?.totalElements; },
  {deep: true})
// 处理 表格_s04uod385g 的 systemList 属性关联
watch(() => dataConnector_conn_d2k3gluhvn_response?.value?.data?.dataList,
  () => { vid_oz6mjcov0p_options_raw.value = dataConnector_conn_d2k3gluhvn_response?.value?.data?.dataList; },
  {deep: true})
// 处理 case_xb8qilydaw 的 caseValue 属性关联
watch(() => dataConnector_conn_lg7vaioqev_response?.value?.data?.totalElements,
  () => { vid_oll1hypc0q_props.caseValue = dataConnector_conn_lg7vaioqev_response?.value?.data?.totalElements; },
  {deep: true})
// 处理 表格_o5x6dlw2yn 的 systemList 属性关联
watch(() => dataConnector_conn_lg7vaioqev_response?.value?.data?.dataList,
  () => { vid_5r571w6dkh_options_raw.value = dataConnector_conn_lg7vaioqev_response?.value?.data?.dataList; },
  {deep: true})
// 处理 case_omk1bu9qfr 的 caseValue 属性关联
watch(() => dataConnector_conn_f2xebtdzuv_response?.value?.data?.totalElements,
  () => { vid_4dg9v453pk_props.caseValue = dataConnector_conn_f2xebtdzuv_response?.value?.data?.totalElements; },
  {deep: true})
// 处理 表格_41t57oc4jl 的 systemList 属性关联
watch(() => dataConnector_conn_f2xebtdzuv_response?.value?.data?.dataList,
  () => { vid_j2ezknemwx_options_raw.value = dataConnector_conn_f2xebtdzuv_response?.value?.data?.dataList; },
  {deep: true})
// ============================ 组件数据同步 ============================

/**
 * 处理元素 对话框 的 ok 事件
 */
let handle_vid_nv7116jo59_ok = throttle(async (...params) => {
  vid_nv7116jo59_props.visible = false;
  vid_nv7116jo59_props.visible = false;
}, 500)
/**
 * 处理元素 对话框 的 cancel 事件
 */
let handle_vid_zdahlucw2m_cancel = throttle(async (...params) => {
  vid_zdahlucw2m_props.visible = false;
}, 500)
/**
 * 处理元素 对话框 的 ok 事件
 */
let handle_vid_zdahlucw2m_ok = throttle(async (...params) => {
  vid_zdahlucw2m_props.visible = false;
}, 500)
/**
 * 处理元素 对话框 的 cancel 事件
 */
let handle_vid_7tkdmcltrd_cancel = throttle(async (...params) => {
  vid_7tkdmcltrd_props.visible = false;
}, 500)
/**
 * 处理元素 对话框 的 ok 事件
 */
let handle_vid_7tkdmcltrd_ok = throttle(async (...params) => {
  vid_7tkdmcltrd_props.visible = false;
}, 500)
/**
 * 处理元素 表格 的 change 事件
 */
let handle_vid_ba39vq33n9_change = throttle(async (...params) => {
  // 处理分页器相关数据
  const [pagination, filters, sorter] = params;
  const { current, pageSize } = pagination;
  vid_ba39vq33n9_props.rt_tableConfig.pagination.current = current;
  vid_ba39vq33n9_props.rt_tableConfig.pagination.pageSize = pageSize;
  // 处理排序相关数据
  const { field, order } = sorter;
  const sorterList = [...vid_ba39vq33n9_props.rowMergeSort];
  let sorterValue = {};
  if (order === 'descend') {
    sorterValue = { order: field, direction: 'DESC' }
  } else if (order === 'ascend') {
    sorterValue = { order: field, direction: 'ASC' }
  }
  sorterList.push(sorterValue);
  vid_ba39vq33n9_props.systemSort = sorterList;
  vid_ba39vq33n9_props.sorter = sorterValue;
}, 500)
/**
 * 处理元素 面包屑 的 click 事件
 */
let handle_vid_gu03ej4an4_click = throttle(async (...params) => {
  response_640eobxscz()
}, 500)
/**
 * 处理元素 按钮 的 click 事件
 */
let handle_vid_d28zamkd07_click = throttle(async (...params) => {
  customFunction_jrb3p6eqqk();
}, 500)
/**
 * 处理元素 按钮 的 click 事件
 */
let handle_vid_sd6x8z93cs_click = throttle(async (...params) => {
  vid_nv7116jo59_props.visible = true;
}, 500)
/**
 * 处理元素 表格 的 clickBtn_40zfwb3kea 事件
 */
let handle_vid_oz6mjcov0p_clickBtn_40zfwb3kea = throttle(async (...params) => {
  // 存储表格当前行数据
  const [record] = params;
  vid_oz6mjcov0p_props.currentRow = record;
  vid_7tkdmcltrd_props.visible = true;
  await dataConnector_conn_xh8v56w34n()
}, 500)
/**
 * 处理元素 表格 的 change 事件
 */
let handle_vid_oz6mjcov0p_change = throttle(async (...params) => {
  // 处理分页器相关数据
  const [pagination, filters, sorter] = params;
  const { current, pageSize } = pagination;
  vid_oz6mjcov0p_props.rt_tableConfig.pagination.current = current;
  vid_oz6mjcov0p_props.rt_tableConfig.pagination.pageSize = pageSize;
  // 处理排序相关数据
  const { field, order } = sorter;
  const sorterList = [...vid_oz6mjcov0p_props.rowMergeSort];
  let sorterValue = {};
  if (order === 'descend') {
    sorterValue = { order: field, direction: 'DESC' }
  } else if (order === 'ascend') {
    sorterValue = { order: field, direction: 'ASC' }
  }
  sorterList.push(sorterValue);
  vid_oz6mjcov0p_props.systemSort = sorterList;
  vid_oz6mjcov0p_props.sorter = sorterValue;
}, 500)
/**
 * 处理元素 表格 的 clickBtn_agyda2glki 事件
 */
let handle_vid_oz6mjcov0p_clickBtn_agyda2glki = throttle(async (...params) => {
  // 存储表格当前行数据
  const [record] = params;
  vid_oz6mjcov0p_props.currentRow = record;
}, 500)
/**
 * 处理元素 表格 的 clickBtn_d3xdlj1wgk 事件
 */
let handle_vid_oz6mjcov0p_clickBtn_d3xdlj1wgk = throttle(async (...params) => {
  // 存储表格当前行数据
  const [record] = params;
  vid_oz6mjcov0p_props.currentRow = record;
}, 500)
/**
 * 处理元素 表格 的 clickBtn_fa585vdazi 事件
 */
let handle_vid_oz6mjcov0p_clickBtn_fa585vdazi = throttle(async (...params) => {
  // 存储表格当前行数据
  const [record] = params;
  vid_oz6mjcov0p_props.currentRow = record;
}, 500)
/**
 * 处理元素 表格 的 clickBtn_xrhah7ybpr 事件
 */
let handle_vid_oz6mjcov0p_clickBtn_xrhah7ybpr = throttle(async (...params) => {
  // 存储表格当前行数据
  const [record] = params;
  vid_oz6mjcov0p_props.currentRow = record;
}, 500)
/**
 * 处理元素 按钮 的 click 事件
 */
let handle_vid_9ccyl4kryf_click = throttle(async (...params) => {
  vid_zdahlucw2m_props.visible = true;
}, 500)
/**
 * 处理元素 表格 的 clickBtn_agyda2glki 事件
 */
let handle_vid_5r571w6dkh_clickBtn_agyda2glki = throttle(async (...params) => {
  // 存储表格当前行数据
  const [record] = params;
  vid_5r571w6dkh_props.currentRow = record;
  customFunction_wenbt73z35();
}, 500)
/**
 * 处理元素 表格 的 change 事件
 */
let handle_vid_5r571w6dkh_change = throttle(async (...params) => {
  // 处理分页器相关数据
  const [pagination, filters, sorter] = params;
  const { current, pageSize } = pagination;
  vid_5r571w6dkh_props.rt_tableConfig.pagination.current = current;
  vid_5r571w6dkh_props.rt_tableConfig.pagination.pageSize = pageSize;
  // 处理排序相关数据
  const { field, order } = sorter;
  const sorterList = [...vid_5r571w6dkh_props.rowMergeSort];
  let sorterValue = {};
  if (order === 'descend') {
    sorterValue = { order: field, direction: 'DESC' }
  } else if (order === 'ascend') {
    sorterValue = { order: field, direction: 'ASC' }
  }
  sorterList.push(sorterValue);
  vid_5r571w6dkh_props.systemSort = sorterList;
  vid_5r571w6dkh_props.sorter = sorterValue;
}, 500)
/**
 * 处理元素 表格 的 clickBtn_40zfwb3kea 事件
 */
let handle_vid_5r571w6dkh_clickBtn_40zfwb3kea = throttle(async (...params) => {
  // 存储表格当前行数据
  const [record] = params;
  vid_5r571w6dkh_props.currentRow = record;
}, 500)
/**
 * 处理元素 表格 的 clickBtn_d3xdlj1wgk 事件
 */
let handle_vid_5r571w6dkh_clickBtn_d3xdlj1wgk = throttle(async (...params) => {
  // 存储表格当前行数据
  const [record] = params;
  vid_5r571w6dkh_props.currentRow = record;
}, 500)
/**
 * 处理元素 表格 的 clickBtn_fa585vdazi 事件
 */
let handle_vid_5r571w6dkh_clickBtn_fa585vdazi = throttle(async (...params) => {
  // 存储表格当前行数据
  const [record] = params;
  vid_5r571w6dkh_props.currentRow = record;
}, 500)
/**
 * 处理元素 表格 的 clickBtn_xrhah7ybpr 事件
 */
let handle_vid_5r571w6dkh_clickBtn_xrhah7ybpr = throttle(async (...params) => {
  // 存储表格当前行数据
  const [record] = params;
  vid_5r571w6dkh_props.currentRow = record;
}, 500)
/**
 * 处理元素 表格 的 change 事件
 */
let handle_vid_j2ezknemwx_change = throttle(async (...params) => {
  // 处理分页器相关数据
  const [pagination, filters, sorter] = params;
  const { current, pageSize } = pagination;
  vid_j2ezknemwx_props.rt_tableConfig.pagination.current = current;
  vid_j2ezknemwx_props.rt_tableConfig.pagination.pageSize = pageSize;
  // 处理排序相关数据
  const { field, order } = sorter;
  const sorterList = [...vid_j2ezknemwx_props.rowMergeSort];
  let sorterValue = {};
  if (order === 'descend') {
    sorterValue = { order: field, direction: 'DESC' }
  } else if (order === 'ascend') {
    sorterValue = { order: field, direction: 'ASC' }
  }
  sorterList.push(sorterValue);
  vid_j2ezknemwx_props.systemSort = sorterList;
  vid_j2ezknemwx_props.sorter = sorterValue;
}, 500)
/* ========================== 组件事件处理方法 ========================== */


/* -------------------------- 生命周期 -------------------------- */

const pageParams = [{"dataType":"STRING","name":"employeeMonthlyGoalsFractionId","dependencies":[{"propertyChain":"employeeMonthlyGoalsFractionId","sourceType":"dataConnector","dataConnector":{"vid":"conn_d2k3gluhvn","paramLink":"employeeMonthlyGoalsFractionId","type":"url"}},{"propertyChain":"employeeMonthlyGoalsFractionId","sourceType":"dataConnector","dataConnector":{"vid":"conn_4fgjnw4u2k","paramLink":"employeeMonthlyGoalsFractionId","type":"url"}},{"sourceType":"dataConnector","propertyChain":"employeeMonthlyGoalsFractionId","dataConnector":{"vid":"conn_lg7vaioqev","type":"url","paramLink":"employeeMonthlyGoalsFractionId"}},{"sourceType":"dataConnector","propertyChain":"employeeMonthlyGoalsFractionId","dataConnector":{"vid":"conn_f2xebtdzuv","type":"url","paramLink":"employeeMonthlyGoalsFractionId"}}]}];
const setPageParams = ()=>{
  pageParams.forEach(param => {
    strategyMap[param.dataType](param, route.query[param.name])
  })
}
const strategyMap = {
  STRING: (param, paramValue) => {
    if (typeof paramValue === 'undefined') {
      pageParameter_state[param.name] = undefined
      return
    }
    pageParameter_state[param.name] = paramValue;
  },
  BOOLEAN: (param, paramValue) => {
    if (typeof paramValue === 'undefined') {
      pageParameter_state[param.name] = undefined
      return
    }
    if('true' === (paramValue || '').toLowerCase()) {
      pageParameter_state[param.name] = true
    } else if('false' === (paramValue || '').toLowerCase()) {
      pageParameter_state[param.name] = false
    } else {
      message.error('参数传入错误！类型不匹配！');
    }
  },
  NUMBER: (param, paramValue) => {
    if (typeof paramValue === 'undefined') {
      pageParameter_state[param.name] = undefined
      return
    }
    if (!isNaN(paramValue)) {
      pageParameter_state[param.name] = Number(paramValue);
    } else {
      message.error('参数传入错误！类型不匹配！');
    }
  },
  ARRAY: (param, paramValue) => {
    if (typeof paramValue === 'undefined') {
      pageParameter_state[param.name] = undefined
      return
    }
    if (isNullOrUnDef(paramValue)  || !paramValue || paramValue=== 'undefined') {
      pageParameter_state[param.name] = [];
    } else if(paramValue.trim().startsWith('[') && paramValue.trim().endsWith(']')) {
      try {
        pageParameter_state[param.name] = JSON.parse(decodeURI(paramValue));
      } catch (error) {
        console.error('参数解析失败 ',error);
        message.error('参数解析失败 ',error);
      }
    } else {
      console.error('参数传入错误！类型不匹配！');
      message.error('参数传入错误！类型不匹配！');
    }
  },
};
/*** PUBLISH_EXEGESIS ***
 immediateWatch(
 () => route.query,
 () => {
 setPageParams();
 dataConnector_conn_4fgjnw4u2k()
 dataConnector_conn_d2k3gluhvn()
 dataConnector_conn_lg7vaioqev()
 dataConnector_conn_f2xebtdzuv()
 }
 )
 *** PUBLISH_EXEGESIS ***/
onMounted(() => {setPageParams() ;dataConnector_conn_4fgjnw4u2k()
  dataConnector_conn_d2k3gluhvn()
  dataConnector_conn_lg7vaioqev()
  dataConnector_conn_f2xebtdzuv()

});

onUnmounted(() => {
  // 销毁定时器
  setTimeOutList.forEach(({ repeat, timer }) => {
    repeat ?  clearInterval(timer): clearTimeout(timer);
  });
});

/* ========================== 生命周期 ========================== */


/* -------------------------- 数据关联处理 -------------------------- */





/* -------------------------- 表单数据同步 -------------------------- */
/* ========================== 表单数据同步 ========================== */

/* ========================== 数据关联处理 ========================== */


/* -------------------------- 不同组件自定义的处理逻辑 -------------------------- */
onMounted(() => {
  const rawColumnList = []
  traversalTreeStructure(vid_ba39vq33n9_props.columnList, (node) => {
    if (node.type === 'column') {
      rawColumnList.push(node)
    }
  });
  /*** PUBLISH_EXEGESIS ***
   // 获取缓存的表格列宽度，处理列宽信息
   UserTableRecords.getTableRecords(localGet('al__UID')).then((res) => {
   const columnWidthMap = res['vid_ba39vq33n9'] ?? {};
   rawColumnList.map((column) => {
   if(columnWidthMap[column.dataIndex]) {
   column.width = columnWidthMap[column.dataIndex]
   }
   })
   });
   *** PUBLISH_EXEGESIS ***/
  vid_ba39vq33n9_props.rawColumnList = rawColumnList;
})
// 生成表格列：相同分组的数据需要合并单元格
const vid_ba39vq33n9_columns = computed(() => {
  // 需要合并单元格的列
  const groupKeys = [];

  // 将表头配置按照groupTitle字段进行分组，以实现多级表头
  const columnList = [...vid_ba39vq33n9_props.columnList];

  function formatColumns(columns) {
    columns.forEach(item => {
      const { dataIndex, contentAlign, children, customCellStyle } = item;
      // 如果当前列是分组列，则递归处理它的子列，当前列本身不作处理
      if (!dataIndex && children && children.length) {
        formatColumns(children);
        return;
      }

      const groupIndex = groupKeys.findIndex(item => item === dataIndex);
      // 如果当前字段属于分组字段，则给它添加合并单元格的配置，否则直接返回
      if (groupIndex === -1) {
        item.customCell = (record, index) => {
          return { style: { 'text-align': contentAlign, ...(customCellStyle || {}) } };
        };
      } else {
        item.customCell = (record, index) => {
          const rowGroupKeys = groupKeys.slice(0, groupIndex + 1);
          const rowSpanList = generateRowSpanList(vid_ba39vq33n9_options.value(), rowGroupKeys,vid_ba39vq33n9_props.editRecordMap);
          return { rowSpan: rowSpanList[index], style: { 'text-align': contentAlign, ...(customCellStyle || {}) } };
        };
      }
    })
  }

  // 格式化column：增加合并单元格的配置，以及自定义样式
  formatColumns(columnList);

  return columnList;
});


// 表格分页器信息：将总条数信息加到基础分页信息中
const vid_ba39vq33n9_pagination = computed(() => {
  const { totalNumber, rt_tableConfig } = vid_ba39vq33n9_props;
  const {
    enable = true,
    current= 1,
    pageSize= 10,
    showSizeChanger= false,
    pageSizeOptions= '10,20,30,40',
    showTotal= false,
    showQuickJumper= false,
    simple= false,
    hideOnSinglePage= false,
  } = rt_tableConfig.pagination ?? {};
  const { size = 'default', layout='bottomRight' } = rt_tableConfig?.style?.paginationStyle || {}
  let info = {};
  if(enable) {
    info = {
      total: totalNumber || 0,
      pageSize,
      size,
      simple,
      current,
      showSizeChanger,
      pageSizeOptions: pageSizeOptions.split(','),
      showQuickJumper,
      hideOnSinglePage,
      position: [layout],
    }
    if(showTotal) {
      info.showTotal = (total, range) => `共${total}个项目，第${current}/${Math.ceil(total / pageSize)}页`
    }
    return info;
  }
  return false;
})


// 补充一个watch，用于监听删除最后一页最后一条数据的情况，然后重新加载数据
watch(() => dataConnector_conn_xh8v56w34n_response?.value?.data, (newValue) => {
  const current = vid_ba39vq33n9_props.rt_tableConfig.pagination.current;
  if (!newValue?.length && current > 1) {
    vid_ba39vq33n9_props.rt_tableConfig.pagination.current = current - 1;
    dataConnector_conn_xh8v56w34n();
  }
});
const vid_gu03ej4an4_props_tabConfig = computed(() => {
  const initValue = [{"parameter":[],"icon":"","title":"我的绩效","applicationId":50000005,"key":"tab1","targetPage":{"customUrl":"","settingType":""},"query":{}},{"parameter":[],"icon":"","title":"我的绩效详情","applicationId":50000005,"key":"tab2","targetPage":{"customUrl":"","settingType":""},"query":{}}];
  return initValue;
})
onMounted(() => {
  const rawColumnList = []
  traversalTreeStructure(vid_oz6mjcov0p_props.columnList, (node) => {
    if (node.type === 'column') {
      rawColumnList.push(node)
    }
  });
  /*** PUBLISH_EXEGESIS ***
   // 获取缓存的表格列宽度，处理列宽信息
   UserTableRecords.getTableRecords(localGet('al__UID')).then((res) => {
   const columnWidthMap = res['vid_oz6mjcov0p'] ?? {};
   rawColumnList.map((column) => {
   if(columnWidthMap[column.dataIndex]) {
   column.width = columnWidthMap[column.dataIndex]
   }
   })
   });
   *** PUBLISH_EXEGESIS ***/
  vid_oz6mjcov0p_props.rawColumnList = rawColumnList;
})
// 生成表格列：相同分组的数据需要合并单元格
const vid_oz6mjcov0p_columns = computed(() => {
  // 需要合并单元格的列
  const groupKeys = ['projectName', 'projectScore', 'projectFractionRatio', 'workHourScore', 'finalPerformanceScore', 'performanceScore', 'overallWorkHourRatio'];

  // 将表头配置按照groupTitle字段进行分组，以实现多级表头
  const columnList = [...vid_oz6mjcov0p_props.columnList];

  function formatColumns(columns) {
    columns.forEach(item => {
      const { dataIndex, contentAlign, children, customCellStyle } = item;
      // 如果当前列是分组列，则递归处理它的子列，当前列本身不作处理
      if (!dataIndex && children && children.length) {
        formatColumns(children);
        return;
      }

      const groupIndex = groupKeys.findIndex(item => item === dataIndex);
      // 如果当前字段属于分组字段，则给它添加合并单元格的配置，否则直接返回
      if (groupIndex === -1) {
        item.customCell = (record, index) => {
          return { style: { 'text-align': contentAlign, ...(customCellStyle || {}) } };
        };
      } else {
        item.customCell = (record, index) => {
          const rowGroupKeys = groupKeys.slice(0, groupIndex + 1);
          const rowSpanList = generateRowSpanList(vid_oz6mjcov0p_options.value(), rowGroupKeys,vid_oz6mjcov0p_props.editRecordMap);
          return { rowSpan: rowSpanList[index], style: { 'text-align': contentAlign, ...(customCellStyle || {}) } };
        };
      }
    })
  }

  // 格式化column：增加合并单元格的配置，以及自定义样式
  formatColumns(columnList);

  return columnList;
});


// 表格分页器信息：将总条数信息加到基础分页信息中
const vid_oz6mjcov0p_pagination = computed(() => {
  const { totalNumber, rt_tableConfig } = vid_oz6mjcov0p_props;
  const {
    enable = true,
    current= 1,
    pageSize= 10,
    showSizeChanger= false,
    pageSizeOptions= '10,20,30,40',
    showTotal= false,
    showQuickJumper= false,
    simple= false,
    hideOnSinglePage= false,
  } = rt_tableConfig.pagination ?? {};
  const { size = 'default', layout='bottomRight' } = rt_tableConfig?.style?.paginationStyle || {}
  let info = {};
  if(enable) {
    info = {
      total: totalNumber || 0,
      pageSize,
      size,
      simple,
      current,
      showSizeChanger,
      pageSizeOptions: pageSizeOptions.split(','),
      showQuickJumper,
      hideOnSinglePage,
      position: [layout],
    }
    if(showTotal) {
      info.showTotal = (total, range) => `共${total}个项目，第${current}/${Math.ceil(total / pageSize)}页`
    }
    return info;
  }
  return false;
})


// 补充一个watch，用于监听删除最后一页最后一条数据的情况，然后重新加载数据
watch(() => dataConnector_conn_d2k3gluhvn_response?.value?.data?.dataList, (newValue) => {
  const current = vid_oz6mjcov0p_props.rt_tableConfig.pagination.current;
  if (!newValue?.length && current > 1) {
    vid_oz6mjcov0p_props.rt_tableConfig.pagination.current = current - 1;
    dataConnector_conn_d2k3gluhvn();
  }
});
onMounted(() => {
  const rawColumnList = []
  traversalTreeStructure(vid_5r571w6dkh_props.columnList, (node) => {
    if (node.type === 'column') {
      rawColumnList.push(node)
    }
  });
  /*** PUBLISH_EXEGESIS ***
   // 获取缓存的表格列宽度，处理列宽信息
   UserTableRecords.getTableRecords(localGet('al__UID')).then((res) => {
   const columnWidthMap = res['vid_5r571w6dkh'] ?? {};
   rawColumnList.map((column) => {
   if(columnWidthMap[column.dataIndex]) {
   column.width = columnWidthMap[column.dataIndex]
   }
   })
   });
   *** PUBLISH_EXEGESIS ***/
  vid_5r571w6dkh_props.rawColumnList = rawColumnList;
})
// 生成表格列：相同分组的数据需要合并单元格
const vid_5r571w6dkh_columns = computed(() => {
  // 需要合并单元格的列
  const groupKeys = ['projectScore', 'workHoursPercentageOfSystemAccountingStr', 'workHourScore', 'templateProjectFinalPerformance', 'performanceScore'];

  // 将表头配置按照groupTitle字段进行分组，以实现多级表头
  const columnList = [...vid_5r571w6dkh_props.columnList];

  function formatColumns(columns) {
    columns.forEach(item => {
      const { dataIndex, contentAlign, children, customCellStyle } = item;
      // 如果当前列是分组列，则递归处理它的子列，当前列本身不作处理
      if (!dataIndex && children && children.length) {
        formatColumns(children);
        return;
      }

      const groupIndex = groupKeys.findIndex(item => item === dataIndex);
      // 如果当前字段属于分组字段，则给它添加合并单元格的配置，否则直接返回
      if (groupIndex === -1) {
        item.customCell = (record, index) => {
          return { style: { 'text-align': contentAlign, ...(customCellStyle || {}) } };
        };
      } else {
        item.customCell = (record, index) => {
          const rowGroupKeys = groupKeys.slice(0, groupIndex + 1);
          const rowSpanList = generateRowSpanList(vid_5r571w6dkh_options.value(), rowGroupKeys,vid_5r571w6dkh_props.editRecordMap);
          return { rowSpan: rowSpanList[index], style: { 'text-align': contentAlign, ...(customCellStyle || {}) } };
        };
      }
    })
  }

  // 格式化column：增加合并单元格的配置，以及自定义样式
  formatColumns(columnList);

  return columnList;
});


// 表格分页器信息：将总条数信息加到基础分页信息中
const vid_5r571w6dkh_pagination = computed(() => {
  const { totalNumber, rt_tableConfig } = vid_5r571w6dkh_props;
  const {
    enable = true,
    current= 1,
    pageSize= 10,
    showSizeChanger= false,
    pageSizeOptions= '10,20,30,40',
    showTotal= false,
    showQuickJumper= false,
    simple= false,
    hideOnSinglePage= false,
  } = rt_tableConfig.pagination ?? {};
  const { size = 'default', layout='bottomRight' } = rt_tableConfig?.style?.paginationStyle || {}
  let info = {};
  if(enable) {
    info = {
      total: totalNumber || 0,
      pageSize,
      size,
      simple,
      current,
      showSizeChanger,
      pageSizeOptions: pageSizeOptions.split(','),
      showQuickJumper,
      hideOnSinglePage,
      position: [layout],
    }
    if(showTotal) {
      info.showTotal = (total, range) => `共${total}个项目，第${current}/${Math.ceil(total / pageSize)}页`
    }
    return info;
  }
  return false;
})


// 补充一个watch，用于监听删除最后一页最后一条数据的情况，然后重新加载数据
watch(() => dataConnector_conn_lg7vaioqev_response?.value?.data?.dataList, (newValue) => {
  const current = vid_5r571w6dkh_props.rt_tableConfig.pagination.current;
  if (!newValue?.length && current > 1) {
    vid_5r571w6dkh_props.rt_tableConfig.pagination.current = current - 1;
    dataConnector_conn_lg7vaioqev();
  }
});
onMounted(() => {
  const rawColumnList = []
  traversalTreeStructure(vid_j2ezknemwx_props.columnList, (node) => {
    if (node.type === 'column') {
      rawColumnList.push(node)
    }
  });
  /*** PUBLISH_EXEGESIS ***
   // 获取缓存的表格列宽度，处理列宽信息
   UserTableRecords.getTableRecords(localGet('al__UID')).then((res) => {
   const columnWidthMap = res['vid_j2ezknemwx'] ?? {};
   rawColumnList.map((column) => {
   if(columnWidthMap[column.dataIndex]) {
   column.width = columnWidthMap[column.dataIndex]
   }
   })
   });
   *** PUBLISH_EXEGESIS ***/
  vid_j2ezknemwx_props.rawColumnList = rawColumnList;
})
// 生成表格列：相同分组的数据需要合并单元格
const vid_j2ezknemwx_columns = computed(() => {
  // 需要合并单元格的列
  const groupKeys = ['finalScore'];

  // 将表头配置按照groupTitle字段进行分组，以实现多级表头
  const columnList = [...vid_j2ezknemwx_props.columnList];

  function formatColumns(columns) {
    columns.forEach(item => {
      const { dataIndex, contentAlign, children, customCellStyle } = item;
      // 如果当前列是分组列，则递归处理它的子列，当前列本身不作处理
      if (!dataIndex && children && children.length) {
        formatColumns(children);
        return;
      }

      const groupIndex = groupKeys.findIndex(item => item === dataIndex);
      // 如果当前字段属于分组字段，则给它添加合并单元格的配置，否则直接返回
      if (groupIndex === -1) {
        item.customCell = (record, index) => {
          return { style: { 'text-align': contentAlign, ...(customCellStyle || {}) } };
        };
      } else {
        item.customCell = (record, index) => {
          const rowGroupKeys = groupKeys.slice(0, groupIndex + 1);
          const rowSpanList = generateRowSpanList(vid_j2ezknemwx_options.value(), rowGroupKeys,vid_j2ezknemwx_props.editRecordMap);
          return { rowSpan: rowSpanList[index], style: { 'text-align': contentAlign, ...(customCellStyle || {}) } };
        };
      }
    })
  }

  // 格式化column：增加合并单元格的配置，以及自定义样式
  formatColumns(columnList);

  return columnList;
});


// 表格分页器信息：将总条数信息加到基础分页信息中
const vid_j2ezknemwx_pagination = computed(() => {
  const { totalNumber, rt_tableConfig } = vid_j2ezknemwx_props;
  const {
    enable = true,
    current= 1,
    pageSize= 10,
    showSizeChanger= false,
    pageSizeOptions= '10,20,30,40',
    showTotal= false,
    showQuickJumper= false,
    simple= false,
    hideOnSinglePage= false,
  } = rt_tableConfig.pagination ?? {};
  const { size = 'default', layout='bottomRight' } = rt_tableConfig?.style?.paginationStyle || {}
  let info = {};
  if(enable) {
    info = {
      total: totalNumber || 0,
      pageSize,
      size,
      simple,
      current,
      showSizeChanger,
      pageSizeOptions: pageSizeOptions.split(','),
      showQuickJumper,
      hideOnSinglePage,
      position: [layout],
    }
    if(showTotal) {
      info.showTotal = (total, range) => `共${total}个项目，第${current}/${Math.ceil(total / pageSize)}页`
    }
    return info;
  }
  return false;
})


// 补充一个watch，用于监听删除最后一页最后一条数据的情况，然后重新加载数据
watch(() => dataConnector_conn_f2xebtdzuv_response?.value?.data?.dataList, (newValue) => {
  const current = vid_j2ezknemwx_props.rt_tableConfig.pagination.current;
  if (!newValue?.length && current > 1) {
    vid_j2ezknemwx_props.rt_tableConfig.pagination.current = current - 1;
    dataConnector_conn_f2xebtdzuv();
  }
});
/**
 * 生成分组字段合并单元格的配置：返回值为一个数字数组，数组里面每一项即为该字段当前行的rowSpan配置
 * @param {Array} 表格中的数据
 * @param {Array} 当前分组字段的列表，注：为了保证优先级低的字段合并后是优先级高的字段合并后的子集，需要把比该字段优先级高的分组字段按顺序放在该字段前面；例如：所有分组字段列表为['grade', 'age', 'score']，要生成age字段的合并单元格配置，则该参数需要传['grade', 'age']
 * @returns {Array} 该字段合并单元格的rowSpan配置，例：[1, 1, 2, 0, 1]
 */
function generateRowSpanList(dataSource, groupKeys,editRecordMap) {
  if (!dataSource || !dataSource.length) {
    return [];
  }

  const rowSpanList = [];

  // 判断单元格是否需要合并的临时值：使用表格数据最后一行进行初始化（表格数据的遍历是倒序进行的）
  let tempValue = getGroupValue(dataSource[dataSource.length - 1], groupKeys);
  // 记录需要合并单元格的数量
  let tempValueCount = 0;

  // 倒序遍历数组，以保证使用最前面一条数据合并单元格
  for (let index = dataSource.length - 1; index >= 0; index--) {
    rowSpanList[index] = 0;
    const groupValue = getGroupValue(dataSource[index], groupKeys);
    // 如果当前行的分组数据跟上一行一致，则将标记数量加一；否则将标记数量的当前值赋给上一条数据，并重置临时值和标记数量
    if(editRecordMap && editRecordMap[index]){ //如果当前行是编辑行
      rowSpanList[index + 1] = tempValueCount;
      tempValue = "";
      tempValueCount=1;
    }
    else if (groupValue === tempValue) {
      tempValueCount++;
    } else {
      rowSpanList[index + 1] = tempValueCount;
      tempValue = groupValue;
      tempValueCount = 1;
    }

    // 遍历到最后一行，将当前的标记数量赋给当前行
    if (index === 0) {
      rowSpanList[index] = tempValueCount;
    }
  }

  return rowSpanList;
}

/**
 * 根据分组字段列表生成当前数据行的分组值
 * @param {Object} 当前数据行
 * @param {Array} 分组字段列表
 * @returns {String} 拼装的当前数据行的分组值，例：record为{ age: 7, grade: '一年级', name: '小赵' }，groupKeys为['grade', 'age']，则拼装后的返回值为'一年级__$__7'
 */
function getGroupValue(record, groupKeys) {
  const groupValueList = [];
  groupKeys.forEach(groupKey => {
    groupValueList.push(`${record[groupKey]}`);
  });

  return groupValueList.join('__$__');
}

/**
 * 将列表数据转换成树状数据
 * @param {Array} 原始的列表数据
 * @param {String|Number} 列表数据的唯一key
 * @param {String|Number} 列表数据转成树时的父级id
 */
function convertListToTree(list, key, parentKey) {
  const clonedList = cloneDeep(list || []);

  // 遍历列表数据，生成树节点的map：key为列表数据的唯一key，value为列表当前行的数据
  const treeNodeMap = {};
  clonedList.forEach(item => {
    treeNodeMap[item[key]] = item;
  });

  const treeDataList = [];
  clonedList.forEach(item => {
    // 如果当前行数据的父级id不在树节点的map中，则当前数据为根节点数据，将其加入最终树形数据的列表；否则将其放入其父节点数据的children中
    if (!treeNodeMap[item[parentKey]]) {
      treeDataList.push(item);
    } else {
      if (!treeNodeMap[item[parentKey]].children) {
        treeNodeMap[item[parentKey]].children = [];
      }
      treeNodeMap[item[parentKey]].children.push(item);
    }
  });

  return treeDataList;
}

/**
 * 表格列宽伸缩处理，使用indexedDB缓存伸缩后的列宽度
 */
const handleResizeColumn = (w, col, vid) => {
  col.width = w;
  /*** PUBLISH_EXEGESIS ***
   UserTableRecords.saveTableRecords(col, localGet('al__UID'), vid)
   *** PUBLISH_EXEGESIS ***/
}
/* ========================== 不同组件自定义的处理逻辑 ========================== */


// ================================定制化逻辑========================================
const state = reactive({
  detailVisible:false,
  firstPart:'',
  secondPart:'',
  thirdPart:'',
  fourthPart:'',
  employeeMonthlyGoalsFractionId:null
})
const currentURL = window.location.href;
const url = new URL(currentURL);
const employeeMonthlyGoalsFractionId = url.searchParams.get("employeeMonthlyGoalsFractionId");

if (employeeMonthlyGoalsFractionId) {
  state.employeeMonthlyGoalsFractionId = employeeMonthlyGoalsFractionId
} else {
  console.log("employeeMonthlyGoalsFractionId 参数未找到");
}


//     绩效详情表格
const stateJX = reactive({
  jxVisible: false,
  current: {},
  jxDataSource: []
})
const jxColumns = [
  {
    title: '项目阶段',
    dataIndex: 'milepostName',
    ellipsis: true,
    width: 130
  },

  {
    title: '任务名称',
    dataIndex: 'taskName',
    ellipsis: true,
    width: 300
  },
  {
    title: '任务负责人',
    dataIndex: 'taskOwner',
    ellipsis: true,
    width: 120
  },
  {
    title: '任务执行人',
    dataIndex: 'taskParticipants',
    ellipsis: true,
    width: 320
  },
  {
    title: '任务完成情况',
    dataIndex: 'taskStatus',
    ellipsis: true,
    width: 130
  },
  {
    title: '倒计时及加减分',
    dataIndex: 'countDown',
    width: 250
  },
  {
    title: '投入工时',
    dataIndex: 'workHours',
    width: 100
  }
]

function showJX(record) {
  get(`/solution-ppm/api/v2/built-in-system-ppm/emgf/${record.id}/template_task_list`).then(data=>{
    if(data.code===200){
      stateJX.jxDataSource = data.data
      stateJX.jxVisible = true
    }else{
      message.error('获取详情失败')
    }
  })

}

const labelToolStyle = {
  maxWidth: '800px'
}
const labelCoulmn = [
  {
    title: '加减分类型',
    width: 120,
    dataIndex: 'pointTypeName'
  },
  {
    title: '加减分数',
    width: 100,
    dataIndex: 'taskPoints'
  },
  {
    title: '加减分触发日期',
    width: 200,
    dataIndex: 'updateTime'
  },
  {
    title: '是否计入总分',
    width: 120,
    dataIndex: 'deductStatus'
  },
  {
    title: '审批日期',
    width: 200,
    dataIndex: 'taskRectificationPointsTime'
  }
]

function getScore(arr) {
  let sum = 0
  if (arr) {
    arr.forEach(item => {
      if (item.deductStatus === '是') {
        sum += item.taskPoints || 0 // 如果 taskPoints 为 null 或者 undefined，将其视为 0
      }
    })
  }
  return sum.toFixed(2)
}

function shouldDisplayCountDownWithTooltip(labelList, text) {
  const result = labelList?.filter(label => label.includes(text))
  if (result && result.length > 0) {
    return [true, result[0]]
  } else {
    return false
  }
}

function hasHyphen(str) {
  return str.includes('-')
}

function hasPlus(str) {
  return str.includes('+')
}

function splitStringByColon(inputString) {
  return inputString.split(':')
}

const shouldDisplayCountDown = targetDate => {
  const { days } = calculateTimeDifference(targetDate)
  return days >= 0 && days <= 7
}
</script>
<style lang="less" scoped>
.page_root {
  width: 100%;
  height: 100%;
  overflow: auto;
}
.page_root :deep(.@{ant-prefix}-spin-nested-loading),
.page_root :deep(.@{ant-prefix}-spin-container)
{
  height: 100%;
}
.page_root :deep(.@{ant-prefix}-spin-container .@{ant-prefix}-table-wrapper)
{
  display: flex;
  flex-flow: column nowrap;
  justify-content: flex-start;
}
.page_root :deep(.@{ant-prefix}-table)
{
  flex: auto;
  overflow: auto;
}
.table-moreBtn_down {
  overflow: hidden; white-space: nowrap; text-overflow: ellipsis; width: 100px;
}

.table-moreBtn_menu :deep(.table-moreBtn_menu-item):hover {
  background: #ebf1ff;
}

/*  表格树结构样式处理，展开按钮层级增加*/
:deep(.@{ant-prefix}-table-row-expand-icon) {
  z-index: 1;
}
/*  表格树结构 由于每个表格项采用自定义组件，使用绝对定位布局，开启树结构导致显示异常，暂时使用层级定位位置 */
:deep(.@{ant-prefix}-table-row-level-1 .@{ant-prefix}-table-cell-with-append .cell-wrapper-left) {
  left: 15px !important;
  width: calc(100% - 15px);
}
:deep(.@{ant-prefix}-table-row-level-2 .@{ant-prefix}-table-cell-with-append .cell-wrapper-left) {
  left: 30px !important;
  width: calc(100% - 30px);
}
:deep(.@{ant-prefix}-table-row-level-3 .@{ant-prefix}-table-cell-with-append .cell-wrapper-left) {
  left: 45px !important;
  width: calc(100% - 45px);
}
:deep(.@{ant-prefix}-table-row-level-4 .@{ant-prefix}-table-cell-with-append .cell-wrapper-left) {
  left: 60px !important;
  width: calc(100% - 60px);
}

/* 穿梭框改变默认样式，为根据组件样式控制左右栏宽度。 */
:deep(.@{ant-prefix}-transfer-list)
{
  height: 100%;
  width: 50%;
}
.vid_eomyf304iq{
  max-height:750px;
  overflow-y:auto;
  display:block
}
.vid_c0w1y0i74s{
  margin-bottom:8px;
  padding-top:16px;
  padding-right:16px;
  padding-bottom:16px;
  padding-left:16px;
  background-color:#3875FF
}
.vid_i3zyzj5i7t{
  color:rgba(255, 255, 255, 1);
  font-size:16px
}
.vid_2x3lxgl37x{
  display:block;
  box-shadow:0px 0px 0px 0px
}
.vid_1h0lg92rqa{
  font-weight:600;
  color:rgba(38, 38, 38, 1)
}
.vid_vtilhzebnd{
  display:flex;
  flex-direction:column;
  flex-wrap:undefined;
  margin-top:8px;
  margin-bottom:8px
}
.vid_7yyxa8t0rj{
  color:rgba(38, 38, 38, 1)
}
.vid_cq6ibd15tf{
  height:4px
}
.vid_o7r1ns2ofa{
  margin-bottom:0px
}
.vid_v6p7lrtjan{
  font-weight:600;
  color:rgba(56, 117, 255, 1)
}
.vid_cff9g3unm8{
  color:rgba(38, 38, 38, 1)
}
.vid_0d5e3e31bo{
  color:rgba(38, 38, 38, 1);
  background-color:rgba(255, 255, 255, 1)
}
.vid_jb7d51kuoy{
  display:block;
  background-color:#FFFFFF
}
.vid_ldwha1vidm{
  color:rgba(38, 38, 38, 1)
}
.vid_c4b77qck3h{
  height:8px
}
.vid_iclsk2pifu{
  font-weight:600;
  color:rgba(56, 117, 255, 1)
}
.vid_gnk4rfh12o{
  color:rgba(38, 38, 38, 1)
}
.vid_gtrlkynxxf{
  color:rgba(38, 38, 38, 1)
}
.vid_2di4xkrr1s{
  display:flex;
  flex-direction:column;
  flex-wrap:undefined;
  margin-top:8px
}
.vid_v38k4hcb9h{
  color:rgba(38, 38, 38, 1)
}
.vid_v5g6dzb80h{
  height:4px
}
.vid_g5qc99k25s{
  font-weight:600;
  color:rgba(56, 117, 255, 1)
}
.vid_2tv9f8pml3{
  color:rgba(38, 38, 38, 1)
}
.vid_g6a37dys2u{
  color:rgba(38, 38, 38, 1)
}
.vid_yofra0b5wv{
  display:flex;
  flex-direction:column;
  flex-wrap:undefined;
  margin-top:8px
}
.vid_e7bqxx8qpk{
  color:rgba(38, 38, 38, 1)
}
.vid_gouve646wg{
  max-height:750px;
  overflow-y:auto;
  display:block
}
.vid_jvbxl2gau7{
  display:block
}
.vid_x4frjkqgzq{
  font-weight:500;
  color:rgba(38, 38, 38, 1)
}
.vid_xzxaetxy25{
  margin-top:8px;
  margin-bottom:0px;
  box-shadow:0px 0px 0px 0px
}
.vid_8uqh1smcg2{
  font-weight:600;
  color:rgba(56, 117, 255, 1)
}
.vid_oe6x9nko0b{
  color:rgba(38, 38, 38, 1)
}
.vid_ba39vq33n9 :deep(.@{ant-prefix}-table-thead) > tr {
  height: 40px;
}
.vid_ba39vq33n9 :deep(.@{ant-prefix}-table-thead) > tr > th {
  background: #3875FF;
  font-size: 14px;
  font-family: arial, helvetica, "microsoft yahei";;
  font-weight: 600;
  color: #FFFFFF;
  border-bottom:1px solid #D9D9D9;
  padding: 8px 16px;
}
.vid_ba39vq33n9 :deep(.@{ant-prefix}-table.@{ant-prefix}-table-bordered) .@{ant-prefix}-table-container .@{ant-prefix}-table-thead > tr:not(:last-child) > th {
  border-bottom:1px solid #D9D9D9;
}
.vid_ba39vq33n9 :deep(.@{ant-prefix}-table.@{ant-prefix}-table-bordered) .@{ant-prefix}-table-container .@{ant-prefix}-table-thead > tr > th {
  border-right:1px solid #D9D9D9;
}
/* 将表格自带的左边框取消，方便设置表头边框颜色和内容边框颜色 */
.vid_ba39vq33n9 :deep(.@{ant-prefix}-table.@{ant-prefix}-table-bordered) .@{ant-prefix}-table-container {
  border-left: none;
}
.vid_ba39vq33n9 :deep(.@{ant-prefix}-table.@{ant-prefix}-table-bordered) .@{ant-prefix}-table-container .@{ant-prefix}-table-thead > tr > th[colstart='0']:first-child {
  border-left:1px solid #D9D9D9;
}
/* 开启粘性表头后，表格结构会发生变化 需另外处理 */
.vid_ba39vq33n9 :deep(.@{ant-prefix}-table.@{ant-prefix}-table-bordered) .@{ant-prefix}-table-container .@{ant-prefix}-table-header table {
  border-top:1px solid #D9D9D9;
}
.vid_ba39vq33n9 :deep(.@{ant-prefix}-table.@{ant-prefix}-table-bordered) .@{ant-prefix}-table-container > .@{ant-prefix}-table-content > table {
  border-top:1px solid #D9D9D9;
}
.vid_ba39vq33n9 :deep(.@{ant-prefix}-table-thead) > tr > th:not(:last-child):not(.@{ant-prefix}-table-selection-column):not(.@{ant-prefix}-table-row-expand-icon-cell):not([colspan])::before {
  background: #D9D9D9;
  width: 1px;
}
.vid_ba39vq33n9 :deep(.@{ant-prefix}-table-cell-scrollbar) {
  box-shadow: none;
}
.vid_ba39vq33n9 :deep(.@{ant-prefix}-table-tbody) tr {
  height: 40px;
}
.vid_ba39vq33n9 :deep(.@{ant-prefix}-table-tbody) tr > td {
  font-size: 14px;
  font-family: arial, helvetica, "microsoft yahei";;
  font-weight: 400;
  color: #262626;
  border-bottom:1px solid #D9D9D9;
  padding: 0 16px;
  word-break: break-all;
  .cell-wrapper {
    padding: 0 16px;
  }
}

.vid_ba39vq33n9 :deep(.@{ant-prefix}-table-tbody) tr > td .cell-wrapper {
  padding: 0 16px;
}
.vid_ba39vq33n9 :deep(.@{ant-prefix}-table-empty .@{ant-prefix}-table-tbody tr > td) {
  padding: 0;
}
.vid_ba39vq33n9 :deep(.@{ant-prefix}-table-tbody) tr > td .@{ant-prefix}-btn {
  padding: 0 30px 0 0;
}
.vid_ba39vq33n9 :deep(.@{ant-prefix}-table-tbody) tr > td .@{ant-prefix}-btn:last-child {
  padding: 0;
}
.vid_ba39vq33n9 :deep(.table-striped-odd) td {
  background-color: #FFFFFF;
}
.vid_ba39vq33n9 :deep(.table-striped-even) td {
  background-color: #F8FAFC;
}
.vid_ba39vq33n9 :deep(.@{ant-prefix}-table.@{ant-prefix}-table-bordered) .@{ant-prefix}-table-container .@{ant-prefix}-table-tbody tr > td {
  border-right:1px solid #D9D9D9;
}
.vid_ba39vq33n9 :deep(.@{ant-prefix}-table.@{ant-prefix}-table-bordered) .@{ant-prefix}-table-container .@{ant-prefix}-table-tbody tr > td:first-child {
  border-left:1px solid #D9D9D9;
}
.vid_ba39vq33n9{
  width:100%
}
.vid_gu03ej4an4 :deep(a) {
  color: undefined;
}
:deep(.vid_gu03ej4an4.@{ant-prefix}-breadcrumb) > span:last-child a {
  color: undefined;
  opacity: 0.75;
}
.vid_xmrvfi343d{
  width:100%;
  height:100%;
  overflow-y:auto;
  display:flex;
  flex-direction:column;
  flex-wrap:undefined;
  flex-grow:1;
  margin-top:8px;
  padding-top:16px;
  padding-right:24px;
  padding-bottom:16px;
  padding-left:24px;
  background-color:#FFFFFF
}
.vid_b3x5mkw968{
  width:100%;
  display:flex;
  flex-direction:row;
  align-items:center;
  flex-wrap:undefined
}
.vid_9i43js7ui7{
  width:100%;
  display:flex;
  align-items:center;
  justify-content:flex-end;
  flex-wrap:undefined
}
.vid_d28zamkd07{
  background-color:rgba(56, 117, 255, 1)
}
.vid_y3qq75sscb{
  margin-bottom:8px;
  padding-left:8px;
  font-weight:600;
  font-size:16px;
  line-height:16px;
  border-left-style:solid;
  border-left-width:4px;
  border-left-color:#3875FF
}
.vid_xr78qqyjxy{
  width:100%;
  display:flex;
  flex-direction:row;
  flex-wrap:undefined;
  margin-top:16px
}
.vid_emmzagc9y1{
  height:48px;
  display:flex;
  align-items:center;
  flex-wrap:undefined;
  padding-left:16px;
  background-color:rgba(240, 242, 245, 1)
}
.vid_tr943o4n9q{
  font-weight:600;
  color:rgba(56, 117, 255, 1);
  font-size:18px
}
.vid_st8vmpp987{
  font-weight:600;
  color:rgba(56, 117, 255, 1);
  font-size:18px
}
.vid_hogez2jlnt{
  height:48px;
  display:flex;
  align-items:center;
  flex-wrap:undefined;
  padding-left:16px;
  background-color:rgba(240, 242, 245, 1)
}
.vid_j3ml6r9mti{
  font-weight:600;
  color:rgba(56, 117, 255, 1);
  font-size:18px
}
.vid_70maqxepqz{
  height:48px;
  display:flex;
  align-items:center;
  flex-wrap:undefined;
  padding-left:16px;
  background-color:rgba(240, 242, 245, 1)
}
.vid_xdi69ruiqs{
  font-weight:600;
  color:rgba(56, 117, 255, 1);
  font-size:18px
}
.vid_drvc3mspfl{
  height:48px;
  display:flex;
  align-items:center;
  flex-wrap:undefined;
  padding-left:16px;
  background-color:rgba(240, 242, 245, 1)
}
.vid_ewsrsr1qot{
  font-weight:600;
  color:rgba(56, 117, 255, 1);
  font-size:18px
}
.vid_9otwy4zewz{
  height:48px;
  display:flex;
  align-items:center;
  flex-wrap:undefined;
  padding-left:16px;
  background-color:rgba(240, 242, 245, 1)
}
.vid_6mlgqj432n{
  font-weight:600;
  color:rgba(56, 117, 255, 1);
  font-size:18px
}
.vid_seen5ewn9z{
  height:48px;
  display:flex;
  align-items:center;
  flex-wrap:undefined;
  padding-left:16px;
  background-color:rgba(240, 242, 245, 1)
}
.vid_c8eek4cuen{
  font-weight:600;
  color:rgba(56, 117, 255, 1);
  font-size:18px
}
.vid_ycd2q5w71a{
  height:48px;
  display:flex;
  align-items:center;
  flex-wrap:undefined;
  padding-left:16px;
  background-color:#F0F2F5;
  box-shadow:0px 0px 0px 0px
}
.vid_p3ax7uv9kv{
  font-weight:600;
  color:rgba(56, 117, 255, 1);
  font-size:18px
}
.vid_9l4z2qaa22{
  display:flex;
  flex-direction:column;
  flex-wrap:undefined
}
.vid_las3v34fw3{
  margin-top:16px
}
.vid_mgn4g8g5qf{
  display:flex;
  align-items:center;
  flex-wrap:undefined
}
.vid_eydfd5rcoi{
  margin-bottom:8px;
  padding-left:8px;
  font-weight:600;
  font-size:16px;
  line-height:16px;
  border-left-style:solid;
  border-left-width:4px;
  border-left-color:#3875FF
}
.vid_sd6x8z93cs{
  color:rgba(255, 123, 0, 1);
  box-shadow:0px 0px 0px 0px
}
.vid_oz6mjcov0p :deep(.@{ant-prefix}-table-thead) > tr {
  height: 40px;
}
.vid_oz6mjcov0p :deep(.@{ant-prefix}-table-thead) > tr > th {
  background: #3875FF;
  font-size: 14px;
  font-family: arial, helvetica, "microsoft yahei";;
  font-weight: 600;
  color: #FFFFFF;
  border-bottom:1px solid #D9D9D9;
  padding: 8px 16px;
}
.vid_oz6mjcov0p :deep(.@{ant-prefix}-table.@{ant-prefix}-table-bordered) .@{ant-prefix}-table-container .@{ant-prefix}-table-thead > tr:not(:last-child) > th {
  border-bottom:1px solid #D9D9D9;
}
.vid_oz6mjcov0p :deep(.@{ant-prefix}-table.@{ant-prefix}-table-bordered) .@{ant-prefix}-table-container .@{ant-prefix}-table-thead > tr > th {
  border-right:1px solid #D9D9D9;
}
/* 将表格自带的左边框取消，方便设置表头边框颜色和内容边框颜色 */
.vid_oz6mjcov0p :deep(.@{ant-prefix}-table.@{ant-prefix}-table-bordered) .@{ant-prefix}-table-container {
  border-left: none;
}
.vid_oz6mjcov0p :deep(.@{ant-prefix}-table.@{ant-prefix}-table-bordered) .@{ant-prefix}-table-container .@{ant-prefix}-table-thead > tr > th[colstart='0']:first-child {
  border-left:1px solid #D9D9D9;
}
/* 开启粘性表头后，表格结构会发生变化 需另外处理 */
.vid_oz6mjcov0p :deep(.@{ant-prefix}-table.@{ant-prefix}-table-bordered) .@{ant-prefix}-table-container .@{ant-prefix}-table-header table {
  border-top:1px solid #D9D9D9;
}
.vid_oz6mjcov0p :deep(.@{ant-prefix}-table.@{ant-prefix}-table-bordered) .@{ant-prefix}-table-container > .@{ant-prefix}-table-content > table {
  border-top:1px solid #D9D9D9;
}
.vid_oz6mjcov0p :deep(.@{ant-prefix}-table-thead) > tr > th:not(:last-child):not(.@{ant-prefix}-table-selection-column):not(.@{ant-prefix}-table-row-expand-icon-cell):not([colspan])::before {
  background: #D9D9D9;
  width: 1px;
}
.vid_oz6mjcov0p :deep(.@{ant-prefix}-table-cell-scrollbar) {
  box-shadow: none;
}
.vid_oz6mjcov0p :deep(.@{ant-prefix}-table-tbody) tr {
  height: 40px;
}
.vid_oz6mjcov0p :deep(.@{ant-prefix}-table-tbody) tr > td {
  font-size: 14px;
  font-family: arial, helvetica, "microsoft yahei";;
  font-weight: 400;
  color: #262626;
  border-bottom:1px solid #D9D9D9;
  padding: 0 16px;
  word-break: break-all;
  .cell-wrapper {
    padding: 0 16px;
  }
}

.vid_oz6mjcov0p :deep(.@{ant-prefix}-table-tbody) tr > td .cell-wrapper {
  padding: 0 16px;
}
.vid_oz6mjcov0p :deep(.@{ant-prefix}-table-empty .@{ant-prefix}-table-tbody tr > td) {
  padding: 0;
}
.vid_oz6mjcov0p :deep(.@{ant-prefix}-table-tbody) tr > td .@{ant-prefix}-btn {
  padding: 0 30px 0 0;
}
.vid_oz6mjcov0p :deep(.@{ant-prefix}-table-tbody) tr > td .@{ant-prefix}-btn:last-child {
  padding: 0;
}
.vid_oz6mjcov0p :deep(.table-striped-odd) td {
  background-color: ;
}
.vid_oz6mjcov0p :deep(.table-striped-even) td {
  background-color: #F8FAFC;
}
.vid_oz6mjcov0p :deep(.@{ant-prefix}-table.@{ant-prefix}-table-bordered) .@{ant-prefix}-table-container .@{ant-prefix}-table-tbody tr > td {
  border-right:1px solid #D9D9D9;
}
.vid_oz6mjcov0p :deep(.@{ant-prefix}-table.@{ant-prefix}-table-bordered) .@{ant-prefix}-table-container .@{ant-prefix}-table-tbody tr > td:first-child {
  border-left:1px solid #D9D9D9;
}
.vid_oz6mjcov0p{
  width:100%;
  margin-top:12px
}
.vid_oll1hypc0q{
  margin-top:16px;
  box-shadow:0px 0px 0px 0px
}
.vid_zbifkhjcw9{
  display:flex;
  align-items:center;
  flex-wrap:undefined
}
.vid_9b6rhaypbr{
  margin-bottom:8px;
  padding-left:8px;
  font-weight:600;
  font-size:16px;
  line-height:16px;
  border-left-style:solid;
  border-left-width:4px;
  border-left-color:#3875FF
}
.vid_9ccyl4kryf{
  color:rgba(255, 123, 0, 1);
  box-shadow:0px 0px 0px 0px
}
.vid_5r571w6dkh :deep(.@{ant-prefix}-table-thead) > tr {
  height: 40px;
}
.vid_5r571w6dkh :deep(.@{ant-prefix}-table-thead) > tr > th {
  background: #3875FF;
  font-size: 14px;
  font-family: arial, helvetica, "microsoft yahei";;
  font-weight: 600;
  color: #FFFFFF;
  border-bottom:1px solid #D9D9D9;
  padding: 8px 16px;
}
.vid_5r571w6dkh :deep(.@{ant-prefix}-table.@{ant-prefix}-table-bordered) .@{ant-prefix}-table-container .@{ant-prefix}-table-thead > tr:not(:last-child) > th {
  border-bottom:1px solid #D9D9D9;
}
.vid_5r571w6dkh :deep(.@{ant-prefix}-table.@{ant-prefix}-table-bordered) .@{ant-prefix}-table-container .@{ant-prefix}-table-thead > tr > th {
  border-right:1px solid #D9D9D9;
}
/* 将表格自带的左边框取消，方便设置表头边框颜色和内容边框颜色 */
.vid_5r571w6dkh :deep(.@{ant-prefix}-table.@{ant-prefix}-table-bordered) .@{ant-prefix}-table-container {
  border-left: none;
}
.vid_5r571w6dkh :deep(.@{ant-prefix}-table.@{ant-prefix}-table-bordered) .@{ant-prefix}-table-container .@{ant-prefix}-table-thead > tr > th[colstart='0']:first-child {
  border-left:1px solid #D9D9D9;
}
/* 开启粘性表头后，表格结构会发生变化 需另外处理 */
.vid_5r571w6dkh :deep(.@{ant-prefix}-table.@{ant-prefix}-table-bordered) .@{ant-prefix}-table-container .@{ant-prefix}-table-header table {
  border-top:1px solid #D9D9D9;
}
.vid_5r571w6dkh :deep(.@{ant-prefix}-table.@{ant-prefix}-table-bordered) .@{ant-prefix}-table-container > .@{ant-prefix}-table-content > table {
  border-top:1px solid #D9D9D9;
}
.vid_5r571w6dkh :deep(.@{ant-prefix}-table-thead) > tr > th:not(:last-child):not(.@{ant-prefix}-table-selection-column):not(.@{ant-prefix}-table-row-expand-icon-cell):not([colspan])::before {
  background: #D9D9D9;
  width: 1px;
}
.vid_5r571w6dkh :deep(.@{ant-prefix}-table-cell-scrollbar) {
  box-shadow: none;
}
.vid_5r571w6dkh :deep(.@{ant-prefix}-table-tbody) tr {
  height: 40px;
}
.vid_5r571w6dkh :deep(.@{ant-prefix}-table-tbody) tr > td {
  font-size: 14px;
  font-family: arial, helvetica, "microsoft yahei";;
  font-weight: 400;
  color: #262626;
  border-bottom:1px solid #D9D9D9;
  padding: 0 16px;
  word-break: break-all;
  .cell-wrapper {
    padding: 0 16px;
  }
}

.vid_5r571w6dkh :deep(.@{ant-prefix}-table-tbody) tr > td .cell-wrapper {
  padding: 0 16px;
}
.vid_5r571w6dkh :deep(.@{ant-prefix}-table-empty .@{ant-prefix}-table-tbody tr > td) {
  padding: 0;
}
.vid_5r571w6dkh :deep(.@{ant-prefix}-table-tbody) tr > td .@{ant-prefix}-btn {
  padding: 0 30px 0 0;
}
.vid_5r571w6dkh :deep(.@{ant-prefix}-table-tbody) tr > td .@{ant-prefix}-btn:last-child {
  padding: 0;
}
.vid_5r571w6dkh :deep(.table-striped-odd) td {
  background-color: ;
}
.vid_5r571w6dkh :deep(.table-striped-even) td {
  background-color: #F8FAFC;
}
.vid_5r571w6dkh :deep(.@{ant-prefix}-table.@{ant-prefix}-table-bordered) .@{ant-prefix}-table-container .@{ant-prefix}-table-tbody tr > td {
  border-right:1px solid #D9D9D9;
}
.vid_5r571w6dkh :deep(.@{ant-prefix}-table.@{ant-prefix}-table-bordered) .@{ant-prefix}-table-container .@{ant-prefix}-table-tbody tr > td:first-child {
  border-left:1px solid #D9D9D9;
}
.vid_5r571w6dkh{
  width:100%;
  margin-top:12px
}
.vid_4dg9v453pk{
  margin-top:16px;
  box-shadow:0px 0px 0px 0px
}
.vid_f6n068s7iw{
  display:flex;
  align-items:center;
  flex-wrap:undefined
}
.vid_8xt5mc34nl{
  margin-bottom:8px;
  padding-left:8px;
  font-weight:600;
  font-size:16px;
  line-height:16px;
  border-left-style:solid;
  border-left-width:4px;
  border-left-color:#3875FF
}
.vid_j2ezknemwx :deep(.@{ant-prefix}-table-thead) > tr {
  height: 40px;
}
.vid_j2ezknemwx :deep(.@{ant-prefix}-table-thead) > tr > th {
  background: #3875FF;
  font-size: 14px;
  font-family: arial, helvetica, "microsoft yahei";;
  font-weight: 600;
  color: #FFFFFF;
  border-bottom:1px solid #D9D9D9;
  padding: 8px 16px;
}
.vid_j2ezknemwx :deep(.@{ant-prefix}-table.@{ant-prefix}-table-bordered) .@{ant-prefix}-table-container .@{ant-prefix}-table-thead > tr:not(:last-child) > th {
  border-bottom:1px solid #D9D9D9;
}
.vid_j2ezknemwx :deep(.@{ant-prefix}-table.@{ant-prefix}-table-bordered) .@{ant-prefix}-table-container .@{ant-prefix}-table-thead > tr > th {
  border-right:1px solid #D9D9D9;
}
/* 将表格自带的左边框取消，方便设置表头边框颜色和内容边框颜色 */
.vid_j2ezknemwx :deep(.@{ant-prefix}-table.@{ant-prefix}-table-bordered) .@{ant-prefix}-table-container {
  border-left: none;
}
.vid_j2ezknemwx :deep(.@{ant-prefix}-table.@{ant-prefix}-table-bordered) .@{ant-prefix}-table-container .@{ant-prefix}-table-thead > tr > th[colstart='0']:first-child {
  border-left:1px solid #D9D9D9;
}
/* 开启粘性表头后，表格结构会发生变化 需另外处理 */
.vid_j2ezknemwx :deep(.@{ant-prefix}-table.@{ant-prefix}-table-bordered) .@{ant-prefix}-table-container .@{ant-prefix}-table-header table {
  border-top:1px solid #D9D9D9;
}
.vid_j2ezknemwx :deep(.@{ant-prefix}-table.@{ant-prefix}-table-bordered) .@{ant-prefix}-table-container > .@{ant-prefix}-table-content > table {
  border-top:1px solid #D9D9D9;
}
.vid_j2ezknemwx :deep(.@{ant-prefix}-table-thead) > tr > th:not(:last-child):not(.@{ant-prefix}-table-selection-column):not(.@{ant-prefix}-table-row-expand-icon-cell):not([colspan])::before {
  background: #D9D9D9;
  width: 1px;
}
.vid_j2ezknemwx :deep(.@{ant-prefix}-table-cell-scrollbar) {
  box-shadow: none;
}
.vid_j2ezknemwx :deep(.@{ant-prefix}-table-tbody) tr {
  height: 40px;
}
.vid_j2ezknemwx :deep(.@{ant-prefix}-table-tbody) tr > td {
  font-size: 14px;
  font-family: arial, helvetica, "microsoft yahei";;
  font-weight: 400;
  color: #262626;
  border-bottom:1px solid #D9D9D9;
  padding: 0 16px;
  word-break: break-all;
  .cell-wrapper {
    padding: 0 16px;
  }
}

.vid_j2ezknemwx :deep(.@{ant-prefix}-table-tbody) tr > td .cell-wrapper {
  padding: 0 16px;
}
.vid_j2ezknemwx :deep(.@{ant-prefix}-table-empty .@{ant-prefix}-table-tbody tr > td) {
  padding: 0;
}
.vid_j2ezknemwx :deep(.@{ant-prefix}-table-tbody) tr > td .@{ant-prefix}-btn {
  padding: 0 30px 0 0;
}
.vid_j2ezknemwx :deep(.@{ant-prefix}-table-tbody) tr > td .@{ant-prefix}-btn:last-child {
  padding: 0;
}
.vid_j2ezknemwx :deep(.table-striped-odd) td {
  background-color: ;
}
.vid_j2ezknemwx :deep(.table-striped-even) td {
  background-color: #F8FAFC;
}
.vid_j2ezknemwx :deep(.@{ant-prefix}-table.@{ant-prefix}-table-bordered) .@{ant-prefix}-table-container .@{ant-prefix}-table-tbody tr > td {
  border-right:1px solid #D9D9D9;
}
.vid_j2ezknemwx :deep(.@{ant-prefix}-table.@{ant-prefix}-table-bordered) .@{ant-prefix}-table-container .@{ant-prefix}-table-tbody tr > td:first-child {
  border-left:1px solid #D9D9D9;
}
.vid_j2ezknemwx{
  width:100%;
  margin-top:12px
}

/*
新弹窗样式
*/
.jx-table :deep(.@{ant-prefix}-table-tbody) tr > td {
  font-size: 14px;
  font-family: arial, helvetica, 'microsoft yahei';
  font-weight: 400;
  color: #262626;
  border-bottom: 1px solid #d9d9d9;
  padding: 8px 16px;
  word-break: break-all;
  .cell-wrapper {
    padding: 8px 16px;
  }
}
.jx-table :deep(.@{ant-prefix}-table-thead) > tr > th {
  background: #3875ff;
  font-size: 14px;
  font-family: arial, helvetica, 'microsoft yahei';
  font-weight: 600;
  color: #ffffff;
  border-bottom: 1px solid #3875ff;
  padding: 8px 16px;
}
.count-down-content {
  display: flex;
  flex-wrap: wrap;
  width: 100%;
  padding: 0 5px;
}

.count-down-content > div {
  box-sizing: border-box;
  height: 14px;
  text-align: center;
  line-height: 14px;
  font-size: 12px;
}
/* 倒计时 */
.count-down {
  border-radius: 1px;
  background: rgba(255, 123, 0, 0.1);
  color: #ff7b00;
  height: 14px;
  min-width: 52%;
  margin-right: 3px;
  margin-bottom: 3px;
}

/* 全组 */
.weight-num {
  font-weight: 600;
}

.all-group-yes {
  border-radius: 1px;
  background: rgba(48, 191, 120, 0.1);
  color: #30bf78;
  height: 14px;
  width: 52%;
  line-height: 14px;
  margin-right: 3px;
  margin-bottom: 3px;
}

/* 项目经理 */
.pm-score-yes {
  border-radius: 1px;
  background: rgba(48, 191, 120, 0.1);
  color: #30bf78;
  height: 14px;
  line-height: 14px;
  margin-right: 3px;
  width: 45%;
  margin-bottom: 3px;
}

/* 负责人 */
.ower-score-yes {
  border-radius: 1px;
  background: rgba(48, 191, 120, 0.1);
  color: #30bf78;
  height: 14px;
  line-height: 14px;
  width: 50%;
  margin-right: 3px;
}

.all-group-no {
  border-radius: 1px;
  background: rgba(245, 34, 45, 0.1);
  color: #f5222d;
  height: 14px;
  width: 44%;
  line-height: 14px;
  margin-bottom: 3px;
  margin-right: 3px;
}

/* 项目经理 */
.pm-score-no {
  border-radius: 1px;
  background: rgba(245, 34, 45, 0.1);
  color: #f5222d;
  height: 14px;
  line-height: 14px;
  margin-right: 3px;
  width: 45%;
}

/* 负责人 */
.ower-score-no {
  border-radius: 1px;
  background: rgba(245, 34, 45, 0.1);
  color: #f5222d;
  height: 14px;
  line-height: 14px;
  width: 50%;
  margin-right: 3px;
}

.count-down-hover {
  color: #262626;
}

.count-down-hover > p {
  margin: 0;
}
.extension-color {
  border-radius: 1px;
  background: rgba(89, 89, 89, 0.1);
  color: #595959;
  height: 14px;
  min-width: 51%;
  margin-right: 3px;
  margin-bottom: 3px;
}
.score-table :deep(.@{ant-prefix}-table-thead) > tr > th {
  background: #f8fafc;
  font-size: 14px;
  font-family: arial, helvetica, 'microsoft yahei';
  font-weight: 600;
  color: #595959;
  padding: 8px 16px;
  border: none;
}

.score-table :deep(.@{ant-prefix}-table-tbody) tr > td {
  font-size: 14px;
  font-family: arial, helvetica, 'microsoft yahei';
  font-weight: 400;
  color: #262626;
  border-bottom: 1px solid #d9d9d9;
  padding: 8px 16px;
  word-break: break-all;
  .cell-wrapper {
    padding: 8px 16px;
  }
}
.score-title {
  margin: 2px 2px 12px 2px;
  font-family: PingFangSC-Medium;
  font-size: 16px;
  color: #262626;
  letter-spacing: 0;
  font-weight: 500;
}
</style>
